1 月 27日算法练习-贪心

文章目录

  • 扫地机器人
  • 分糖果
  • 最小战斗力差距
  • 谈判
  • 纪念品分组

扫地机器人

在这里插入图片描述
思路:

  1. 最优机器人清理方法:机器人清理方法先扫左边,有时间再扫右边。
  2. 最短时间:通过枚举,从 1 开始,清理面积会越大直到全部面积的清理时间是最小时间。优化:二分枚举时间,由于随时间增大清理面积增大,单调可以用二分。
#include<iostream>
#include<stdbool.h>
using namespace std;
const int N = 1e5+10;
int a[N];
int n,k;

bool check(int mid){
    int pos=0;
    for(int i=1;i<=k;i++){
        int t=mid;
        t-=(a[i]-pos-1)*2;
        if(t<0)return false;
        pos = a[i]+t/2;
    }
    if(pos<n)return false;
    return true;
}
int main( ){
    cin>>n>>k;
    for(int i=1;i<=k;i++)cin>>a[k];
    sort(a+1,a+1+k);
    int l=1,r=2*n,ans=2*n;
    while(l<=r){
        int mid=l+r>>1;
        if(check(mid))ans=mid,r=mid-1;
        else l=mid+1;
    }
    cout<<ans<<'\n';
    return 0;
}

分糖果

在这里插入图片描述
思路:贪心中的规律题。先理解题意+找出规律。先排序,能保证最大的最小,然后分成三种情况,第一种全部字符相等,就平分,多余的放到最后一个。第二种,如果第 x 个和第一个相等就直接输出 x 到最后。第三种如果不相等,把 x 后面放到第一个,直接输出 x。x 肯定比第一个字符串大,并且 x 最小。

找规律的贪心,考验思维,将字符串分类讨论,设计贪心策略。
先给字符串排序,然后我们可以分为三类讨论:
1)字符串全相等(假设全a),那就是尽量使得每个人分到的字符串的最大长度尽可能小就行。
2)s[x]==s[1],说明第x个是最小的字符带着后面所有的字符一起输出。
3)s[x]!=s[1],后面一坨字符可以直接丢到s[1]后面,分给第一个同学。

#include<iostream>
using namespace std;
const int N =1e6+10;
char s[N];
int main( ){
    int n,x;cin>>n>>x;
    for(int i=1;i<=n;i++)cin>>s[i];
    sort(s+1,s+1+n);
    if(s[1]==s[n]){
        for(int i=1;i<=n/x+(n%x?1:0);i++)cout<<s[i];
    }else{
        if(s[1]==s[x])for(int i=x;i<=n;i++)cout<<s[i];
        else cout<<s[x];
    }
    return 0;
}

最小战斗力差距

在这里插入图片描述
思路:贪心,所有方案中排序后划分分为 a,b 两个组会比不排序划分的战斗力更小。所以选择排序后将 a,b 划分,其中枚举所有结果选择最小的。
要将战斗力分为两部分,为了使得差距最小,我们可以将战斗力排序后,找一个位置进行划分,使得左边的都在a,右边的都在b,从而这个差距就是这个位置两边的战斗力差距,说明差距的取值仅有n-1种,枚举即可。
这个题启发我们,当混乱的数据不好处理,且排序不影响答案时,尝试先排序再分析。

#include<iostream>
using namespace std;
const int N = 1e5+10;
int a[N];
int main( ){
    int n;cin>>n;
    for(int i=1;i<=n;i++)cin>>a[i];
    sort(a+1,a+1+n);
    int ans=a[2]-a[1];
    for(int i=2;i<=n;i++)ans=min(ans,a[i]-a[i-1]);
    cout<<ans<<'\n';
    return 0;
}

谈判

在这里插入图片描述
思路:一共要进行 n-1 步,只要保证每次合并最小的两个部落就能保证总代价最小。
总操作数一定情况下的最小代价模型。我们知道这里一共需要进行的操作次数一定是n-1次,那么贪心地想,如果每次选择代价最小的两个部落合并,不仅可以使得当前代价最小,还可以使得后续合并的代价也尽可能小。
部落大小通过优先队列来维护。

#include<iostream>
#include<queue>
using namespace std;
using ll = long long;
priority_queue<ll,vector<ll>,greater<ll>> pq;
int main( ){
    int n;cin>>n;
    for(int i = 0;i<n;i++){
        ll x;cin>>x;
        pq.push(x);
    }
    ll ans=0;
    while(pq.size()>1){
        ll x=pq.top();pq.pop();
        ll y=pq.top();pq.pop();
        ans+=x+y;
        pq.push(x+y);
    }
    cout<<ans<<'\n';
    return 1;
}

纪念品分组

在这里插入图片描述
思路:要使分组尽可能少就尽可能进行两人分组,两人分组中一个多带一个小的会比两小+两多这种方案分组少,所以用一个多带一个小。因为两个多可能超出范围,然后就单独分组多分出组数。
最少数目的贪心模型。
为了使得组数最小,我们应该使得每一组内尽可能装两件礼物(最多只能装两件),尽量占满一组的容量。所以贪心策略是,每一个贵的礼物,带一个便宜的,因为带也是一组,不带也是一组,肯定选择带,且最贵的和最便宜的最容易占满一组。

#include<iostream>
using namespace std;
const int N = 1e5;
int a[N];
int main(){
    int w,n;cin>>w>>n;
    for(int i=1;i<=n;i++)cin>>a[i];
    sort(a+1,a+1+n);
    int l=1,r=n,ans=0;
    while(l<=r){
        ans++;
        if(l==r){
            break;
        }
        if(a[l]+a[r]<=w){
            l++,r--;
        }else r--;
    }
    cout<<ans<<'\n';
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/354857.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

深入理解C语言(3):自定义类型详解

文章主题&#xff1a;结构体类型详解&#x1f30f;所属专栏&#xff1a;深入理解C语言&#x1f4d4;作者简介&#xff1a;更新有关深入理解C语言知识的博主一枚&#xff0c;记录分享自己对C语言的深入解读。&#x1f606;个人主页&#xff1a;[₽]的个人主页&#x1f3c4;&…

事务:分布式事务与本地事务的区别

分布式事务章节 分布式事务&#xff1a;2PC与3PC的区别-CSDN博客 分布式事务&#xff1a;X/Open DTP分布式事务处理模型与分布式事务处理XA规范-CSDN博客 事务简介 事务(Transaction)是操作数据库中某个数据项的一个程序执行单元(unit)。事务是由一组操作构成的可靠的独立的…

[SWPUCTF 2018]SimplePHP1

打开环境 有查看文件跟上传文件&#xff0c;查看文件里面显示没有文件url貌似可以文件读取 上传文件里面可以上传文件。 先看一下可不可以文件读取 /etc/passwd不能读取&#xff0c;源码提示flag在f1ag.php 看看能不能读取当前的文件&#xff0c; 先把代码摘下来 file.php …

LPC系列一个定时器不同频率

1.背景 最近研究的LPC804里只有一个ctimer&#xff0c;很多时候用的捉襟见肘的&#xff0c;官方给了一份双匹配的参考例程&#xff0c;不过实际用处不大。不过我花了一晚上的时间&#xff0c;终于研究出来将一个定时器拆成四个定时器用的办法了。这个方法适用于用回调函数的LP…

Fastbee物联网项目新手快速入门

一&#xff0c;前提条件 后端环境准备如下&#xff1a; 正式环境推荐硬件资源最低要求4c8G&#xff0c;硬盘40G。JDK 1.8.0_2xx (需要小版本号大于200) 。Maven3.6.3。&#xff08;IDEA启动时使用IDEA默认自带的版本即可&#xff09;。 启动fastbee之前&#xff0c;请先确定…

go语言(十七)----json

1、结构体转json package mainimport ("encoding/json""fmt" )type Movie struct{Title string json:"title"Year int json:"year"Price int json:"rmb"Actors []string json:"actors" }func main() {movie : Mo…

《A++ 敏捷开发》- 6 估算软件规模

为什么要估规模 规模可以帮我们&#xff1a; 依据历史数据策划&#xff0c;例如估算工作量、工期。归一(Normalize)不同项目作比较。知道现在水平。 依据历史数据策划先把项目分成组件&#xff0c;参考以往类似的组件所花工作量&#xff0c;估算整个项目的总工作量。规模大小…

Spring框架-AOP底层实现原理

文章目录 AOP底层实现原理AOP实现原理分析Java设计模式&#xff08;代理模式&#xff09;静态代理JDK动态代理CGLIB动态代理 AOP操作术语 AOP底层实现原理 AOP实现原理分析 1、AOP采取横向抽取机制&#xff0c;取代传统的纵向抽取机制&#xff08;继承关系&#xff09;。 2、…

腾讯云一键部署搭建幻兽帕鲁联机服务器教程

幻兽帕鲁&#xff08;Palworld&#xff09;是一款多人在线游戏&#xff0c;为了获得更好的游戏体验&#xff0c;许多玩家选择自行搭建游戏联机服务器&#xff0c;但是如何搭建游戏联机服务器成为一个难题&#xff0c;腾讯云提供了游戏联机服务器一键部署方案&#xff0c;让大家…

Java笔记 --- 五、File

五、File 概述 将字符串变成File对象&#xff0c;再去使用里面的方法 父级路径&#xff1a;除了文件本身的路径 C:\Users\Desktop 子级路径&#xff1a;文件名 m.txt 常见的成员方法 判断、返回 length 只能获取文件的大小(字节数量) 创建、删除 delete方法默认只能删除…

搜索<2>——记忆化搜索与剪枝

Part 1:记忆化搜索 记忆化搜索其实就是拿个数组记录下已经得到的值&#xff0c;这样再遇到的时候直接调用即可。 P1464: 虽然此题好像不用记忆化也行&#xff0c;但我们还是老老实实写个记忆化吧。没什么困难的地方&#xff0c;就是它叫你怎么干你就怎么干&#xff0c;记得开…

【Java 数据结构】栈和队列

栈和队列 1. 栈(Stack)1.1 概念1.2 栈的使用1.3 栈的模拟实现1.4 栈的应用场景1.5 概念区分 2. 队列(Queue)2.1 概念2.2 队列的使用2.3 队列模拟实现2.4 循环队列 3. 双端队列 (Deque)4. 面试题 1. 栈(Stack) 1.1 概念 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在…

Cyberdog2 docker环境软件源无法被验证问题

搭建docker系统后更新软件源sudo apt-get update出现异常 经过查询GPT&#xff0c;使用如下方式成功解决 从keyserver.ubuntu.com获取缺失的公钥&#xff0c;并添加到apt-key中。具体命令如下&#xff1a; gpg --keyserver keyserver.ubuntu.com --recv-keys F42ED6FBAB17C6…

怎么把文章变成视频?原来这么简单

大家有没有发现&#xff0c;在各个平台浏览文章的时候总会发现很多图文相结合的长篇文章&#xff0c;对于不喜欢看长图文的人来说&#xff0c;长篇的图文会带来很多的负担&#xff0c;于是就有很多人想要把长篇的图文转换成视频&#xff0c;那么该如何转换呢&#xff1f; 首先&…

CMake简明教程 笔记

推荐B站视频&#xff1a;1.1 Cmake构建项目的流程_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1xa4y1R7vT?p1&vd_sourcea934d7fc6f47698a29dac90a922ba5a3 >>目录 1&#xff09;CMake初体验 CMake构建流程Windows下使用CMake构建项目Linux下使用CMake构…

C#,数据检索算法之插值搜索(Interpolation Search)的源代码

数据检索算法是指从数据集合&#xff08;数组、表、哈希表等&#xff09;中检索指定的数据项。 数据检索算法是所有算法的基础算法之一。 本文提供插值搜索&#xff08;Interpolation Search&#xff09;的源代码。 1 文本格式 using System; namespace Legalsoft.Truffer.…

08.Elasticsearch应用(八)

Elasticsearch应用&#xff08;八&#xff09; 1.为什么需要相关性算分 我们在文档搜索的时候&#xff0c;匹配程度越高的相关性算分越高&#xff0c;算分越高的越靠前&#xff0c;但是有时候我们不需要算分越高越靠前我们可能需要手动影响算分来控制顺序比如广告&#xff08…

一文搞懂Secure Boot (安全启动)

何为安全启动&#xff1f; 随着汽车新四化的发展&#xff0c;尤其是网联化及自动驾驶的推进&#xff0c;汽车网络信息安全显得越来越重要。 随着高级驾驶辅助(ADAS)及自动驾驶的推出&#xff0c;车辆动力及制动控制需要部分或全部授权给智能驾驶系统&#xff0c;而车辆又暴露…

怎么测试app?app的测试技巧是什么?

前言 今天笔者想和大家来唠唠app测试&#xff0c;现在的app有非常的多&#xff0c;这些app都是需要经过测试之后才能发布到应用市场中&#xff0c;app已经成为了我们日常生活中不可或缺的一部分了&#xff0c;但它的功能必须强大&#xff0c;才能受到消费者的重视&#xff0c;…

WordPress如何自定义日期和时间格式?附PHP日期和时间格式字符串

WordPress网站在很多地方都需要用到日期和时间&#xff0c;那么我们应该在哪里设置日期和时间呢&#xff1f;又如何自定义日期和时间格式呢&#xff1f;下面boke112百科就跟大家一起来学习一下PHP标准化的日期和时间格式字符串。 特别说明&#xff1a;格式字符是标准化的&#…