http://www.lydsy.com/JudgeOnline/problem.php?id=1639

同tyvj1359,http://www.cnblogs.com/iwtwiioi/p/3942145.html

#include <cstdio>
#include <cstring>
#include <cmath>
#include <string>
#include <iostream>
#include <algorithm>
using namespace std;
#define rep(i, n) for(int i=0; i<(n); ++i)
#define for1(i,a,n) for(int i=(a);i<=(n);++i)
#define for2(i,a,n) for(int i=(a);i<(n);++i)
#define for3(i,a,n) for(int i=(a);i>=(n);--i)
#define for4(i,a,n) for(int i=(a);i>(n);--i)
#define CC(i,a) memset(i,a,sizeof(i))
#define read(a) a=getint()
#define print(a) printf("%d", a)
#define dbg(x) cout << #x << " = " << x << endl
#define printarr(a, n, m) rep(aaa, n) { rep(bbb, m) cout << a[aaa][bbb]; cout << endl; }
inline const int getint() { int r=0, k=1; char c=getchar(); for(; c<'0'||c>'9'; c=getchar()) if(c=='-') k=-1; for(; c>='0'&&c<='9'; c=getchar()) r=r*10+c-'0'; return k*r; }
inline const int max(const int &a, const int &b) { return a>b?a:b; }
inline const int min(const int &a, const int &b) { return a<b?a:b; } const int N=100005;
int n, m, a[N]; inline const bool check(const int &x) {
int sum=0, t=0, i;
for(i=1; i<=n; ++i) {
sum+=a[i];
if(sum>x) sum=a[i], ++t;
if(t>=m) return 0;
}
return 1;
} int main() {
read(n); read(m);
int mx=0, sum=0;
for1(i, 1, n) { read(a[i]); mx=max(mx, a[i]); sum+=a[i]; }
int l=mx, r=sum, mid;
while(l<=r) {
mid=(l+r)>>1;
if(check(mid)) r=mid-1;
else l=mid+1;
}
print(r+1);
return 0;
}

Description

Farmer John是一个令人惊讶的会计学天才,他已经明白了他可能会花光他的钱,这些钱本来是要维持农场每个月的正常运转的。他已经计算了他以后 N(1<=N<=100,000)个工作日中每一天的花费moneyi(1<=moneyi<=10,000),他想要为他连续 的M(1<=M<=N)个被叫做“清算月”的结帐时期做一个预算,每一个“清算月”包含一个工作日或更多连续的工作日,每一个工作日都仅被包 含在一个“清算月”当中。 FJ的目标是安排这些“清算月”,使得每个清算月的花费中最大的那个花费达到最小,从而来决定他的月度支出限制。

Input

第一行:两个用空格隔开的整数:N和M

第2..N+1行:第i+1行包含FJ在他的第i个工作日的花费

Output

第一行:能够维持每个月农场正常运转的钱数

Sample Input

7 5
100
400
300
100
500
101
400

Sample Output

500
输入细节

这里有7个工作日来被5个“清算月”划分。他花费100,400,100,500,101,和400元在他的每个工作日。

输出细节

如果FJ安排他的月度预算,他将把前两天划分在一个月中,把第三天、第四天划分在一个月当中,最后的三个工作日各自在一个月当中,所以他一个月最多花费500元,其他的方法总是得出一个较大的结果。

100 400 300 100 500 101 400 每天花费
---1--- ---2--- -3- -4- -5- 月度标号
500 400 500 101 400 月度花费

HINT

Source

最新文章

  1. MVP -----个人理解与示例(android例子 实现)
  2. COSBench添加driver负载机
  3. 写一个ajax程序就是如此简单
  4. 【自动化测试】Selenium的智能等待
  5. C#压缩文件为zip格式
  6. 玩转12款Linux开源机器人
  7. chrome插件推荐
  8. CoreML试水--图片识别
  9. 启动eclipse时候提示错误Error:Could not create the Java Virtual Machine. Error:A Fatal exception has occurred,Program will exit.
  10. flutter 解析json
  11. DirectX11 With Windows SDK--18 使用DirectXCollision库进行碰撞检测
  12. Windows 上编译 corefx 源码生成 Linux 上可用的 System.Data.SqlClient.dll
  13. vbs 去掉字符串中的空格
  14. Java红黑树详谈
  15. Servlet案例5:用户登录失败信息回显
  16. 基于tomcat插件的maven多模块工程热部署(附插件源码)
  17. Mahout实战---评估推荐程序
  18. Ransac 与 最小二乘(LS, Least Squares)拟合直线的效果比较
  19. Qt多线程同步总结
  20. sqlplus中文问号

热门文章

  1. jquery插件制作教程 txtHover(转载)
  2. 【CI3.1】CI框架简单使用方法
  3. jquery 常用api 小结2
  4. EL和自定义函数库
  5. Yii::记录日志到自定义文件
  6. XHTML学习书籍
  7. [Windows驱动开发](三)基础知识——驱动例程
  8. Mockito 相关资料
  9. node.js 操作excel 表格与XML文件常用的npm
  10. 我写的websocket推送例子,每隔5秒服务器向客户端浏览器发送消息(node.js和浏览器)