CodeVS1725 探险 【二分答案】【贪心】
【题目描述】
有编号为1至n的n个同学一起去探险,现在把他们分成k个小组,每个小组完成一项探险任务。分组时,如果第i人与第j人分在同一组(i < j),则他们之间的所有人(第i+1,i+2,…,j-1个)也必须在同一个小组中。
一个小组内所有人的体力和越小,途中可能越危险。为了确保每个同学的安全,要求分组时,使得所有小组中,体力和最小的那个小组的所有人的体力和尽量大。
依次告诉你每个人的体力,如何分组呢?
【题解】
首先这个题CodeVS没有给数据范围,我查了一下,才知道是1≤n≤30000,1≤k≤1000, k≤n,每个人的体力值不大于10000。
这个题的意思是,要你在所有可能的分法中找出一种情况,使得最弱的那个组的体力和最大。很显然,我们是希望我们求的答案在这一组最小的情况下最大,如果我们枚举答案的话,这个答案应该是从大到小的,而枚举的思路就让我们想到了用二分答案。
想到了二分就要想怎么写check。很显然,我们想让其他的分组在每个组都大于枚举的那个答案的情况下还要满足分成k组的情况。这个是比较好写的。
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=30000;
int w[N+5];
int n,k;
bool check(int x)
{int sum=0,num=0;//表示体力和和组数 for(int i=1;i<=n;i++){if(sum<x)sum+=w[i];else{num++;sum=w[i];if(num>=k)return true;}}if(sum>=x)num++;//可能会在加上w[n]的时候少算一组 if(num>=k)return true;else return false;
}
int main()
{scanf("%d%d",&n,&k);for(int i=1;i<=n;i++)scanf("%d",&w[i]);int lf=0,rg=1e9+5;while(rg-1>lf){int mid=(lf+rg)>>1;if(check(mid))lf=mid;else rg=mid;}printf("%d",lf);return 0;
}
CodeVS1725 探险 【二分答案】【贪心】相关推荐
- 洛谷3933 Chtholly Nota Seniorious 二分答案+贪心
题目链接 题意 给你一个N*M的矩阵 (N,M <=2000) 把他分成两部分 使两部分的极差较大的一个最小 求这个最小值.然后分矩阵的要求是:每个部分内部的方块之间,可以通过上下左右相互到 ...
- 二分答案——数列分段 Section II(洛谷 P1182)
题目选自洛谷P1182 本题解法:二分答案+贪心 思路:首先,分析题目,求最大值的最小化,直接联想到二分,So我们直接二分答案,关键是要怎么去高效的check,我们考虑一个贪心的思路,能加的就加上,不 ...
- 二分查找和二分答案(洛谷)
细节好可怕~ 二分查找算法的细节剖析_JackComeOn的博客-CSDN博客原文:https://www.cnblogs.com/kyoner/p/11080078.html我周围的人几乎都认为二分 ...
- 【BZOJ3048】Cow lineup,贪心+队列维护(或二分答案)
传送门(权限题) 题面: 3048: [Usaco2013 Jan]Cow Lineup Time Limit: 2 Sec Memory Limit: 128 MB Submit: 121 Solv ...
- 数学题 贪心+二分答案
Description 现在有两个数组 AA 和 BB, 分别包含 xx 与 yy 个元素. 定义一个新的数组 CC, CC 中包含 x×yx×y 个元素,为 AA 中所有元素除以 BB 中所有元素. ...
- 洛谷P1182 数列分段Section II 二分答案
洛谷P1182 数列分段Section II 二分答案 题意:将 n 个 数 分为 m段 求一种方案,使这m段中最大的和 最小 额..可能有点拗口,其实就是说每一种方案,都有对应的 每段和的最大值, ...
- LuoguP1948 电话线 【二分答案/图论】
其实是和奥格瑞玛一样的题啦. 但还是想了很久后看了题解. 多年以后,笨笨长大了,成为了电话线布置师.由于地震使得某市的电话线全部损坏,笨笨是负责接到震中市的负责人.该市周围分布着N(1<=N&l ...
- Luogu P2920 时间管理【二分答案】
二分答案水题. (像我这么蒻的人都能十几分钟A掉) https://www.luogu.org/problemnew/show/P2920 开始时间一定在从0到min(t[i]-s[i])的一段区间上 ...
- 紫书 例题8-10 UVa 714 (二分答案)
这道题让最大值最小, 显然是二分答案 当题目求的是最大值最小, 最小值最大, 这个时候就要想到二分答案 为什么可以二分答案呢, 因为这个时候解是单调性的, 如果简单粗暴一点 就全部枚举一遍, 验证答案 ...
最新文章
- putty利用密钥ssh服务登录ubuntu server 10.4
- SEO(搜索引擎最佳化)简介
- vue 分模块打包 脚手架_vue-cli分模块独立打包
- mysql搜索_mysql 几种搜索引擎的比较
- 关于Matlab编程的思考(待续)
- java定时器的使用(Timer)
- 【转】VS2005 CTP 版本这个CTP是什么意思
- 领域应用 | 金融资管领域知识图谱的构建和应用
- ECCV 2020 | 清华提出基于循环关联的自监督行人再识别, 无标签ReID仅需两个摄像头!...
- 阿里云mysql本地可以连接数据库_本地电脑连接阿里云服务器上搭建的MySQL数据库...
- 单机到集群的WEB架构演变
- Struts2学习笔记一之工作原理和struts.xml解析
- C语言 #和##的用法
- linux php连接mysql权限不够_PHP LINUX APACHE MYSQL权限挣扎
- 数据结构用c语言描述第二版高等教育出版社,耿国华《数据结构-c语言描述(第2版)》,高等教育出版社...
- java聊天室需求分析_java聊天室源程序需求分析2业务需求2.1。与电视聊天
- word文档如何画线条流程图_如何利用word文档工具绘制流程图
- 鼠标中键控制音量大小
- 营业执照识别/发票识别在供应链与物流智能移动解决方案
- linux三剑客-sed命令的学习笔记