poj3273 Monthly Expense(二分)
2016-05-28 19:37
423 查看
poj3273
题目
http://poj.org/problem?id=3273思路
题意就是给你n个数字,要求你不打乱顺序的分成m个组,要求使每个组的和值最小,输出其中和值最大的那个组的值。思路就是二分,下限是单个最大的元素,上限是所有元素的和,判断的时候因为是连续的,所以就贪心依次往下加,超过了就开新的一组,最后比一下组的个数与m的关系。
代码
#include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> using namespace std; int a[110000]; int n,m; int judge(int k) { int group=1; int sum=0; for(int i=0; i<n; i++) { if((sum+a[i])<=k) { sum+=a[i]; continue; } else { sum=a[i]; group++; } } if(group>m) return 0; else return 1; } int main() { scanf("%d %d",&n,&m); int low,high; low=high=0; for(int i=0; i<n; i++) { scanf("%d",&a[i]); low=max(low,a[i]); high+=a[i]; } int mid; while(low<high) { mid=(low+high)/2; if(!judge(mid)) { low=mid+1; } else { high=mid-1; } } printf("%d\n",low); return 0; }
相关文章推荐
- 深入学习java集合:Hashtable<K,V>实现
- 找出堆中小于某个值X的所有节点
- javax.persistence.Table.indexes()[Ljavax/persistence/Index;
- VirtualBox安装CentOS7(32位)遇到的问题
- 优化mysql之key_buffer_size设置
- Unity Oculus开发注意事项
- Win8风格界面效果
- 约瑟夫环问题
- 深入学习java集合:LinkedHashMap<K,V>实现
- 第十一周上机实践项目3(2):警察和厨师
- HTTPS的学习总结
- 三个故事
- 代码整洁之道
- Weka中文乱码解决方法
- 《校园封神榜》第二阶段个人工作总结——第五天
- win10 edge打不开,解决方案
- 深度学习第五课-训练注意事项与框架使用
- C++标准库——random
- 练习三 Problem M
- 181. Employees Earning More Than Their Managers