BZOJ 1639: [Usaco2007 Mar]Monthly Expense 月度开支
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
第一行:能够维持每个月农场正常运转的钱数
题解:
M<=N,如果分成<M个清算月满足要求,那么也可以分成M个清算月。
最大值最小,考虑二分。
二分一个ans。
然后模拟一下每一天尽量把钱用完,
得到一个需要的清算月数目cnt。
若cnt<=M合法,否则不合法。
代码:
#include<cstdio>
#include<cstring>
#include<algorithm>
//by zrt
//problem:
using namespace std;
typedef long long LL;
LL a[100005],n,k;
LL maxx=0;
LL l,r;
bool judge(LL x){
LL sum=0;
LL cnt=0;
for(int i=1;i<=n;i++){
if(sum+a[i]>x){
sum=a[i];
cnt++;
if(cnt>k) return 0;
}else{
sum+=a[i];
}
}
if(sum)cnt++;
if(cnt<=k) return 1;
else return 0;
}
LL sum;
int main(){
#ifdef LOCAL
freopen("in.txt","r",stdin);
freopen("out.txt","w",stdout);
#endif
scanf("%lld%lld",&n,&k);
for(int i=1;i<=n;i++){
scanf("%lld",&a[i]);
maxx=max(maxx,a[i]);
sum+=a[i];
}
l=maxx-1,r=sum;
while(r-l>1){
int m=(l+r)>>1;
if(judge(m)){
r=m;
}else l=m;
}
printf("%lld\n",r);
return 0;
}
BZOJ 1639: [Usaco2007 Mar]Monthly Expense 月度开支的更多相关文章
- BZOJ 1639: [Usaco2007 Mar]Monthly Expense 月度开支( 二分答案 )
直接二分答案然后判断. ----------------------------------------------------------------------------- #include&l ...
- bzoj 1639: [Usaco2007 Mar]Monthly Expense 月度开支【二分】
忘开long long了居然没WA 二分答案,枚举判断看最后需要的月份数是否小于等于要求的即可 #include<iostream> #include<cstdio> usin ...
- 1639: [Usaco2007 Mar]Monthly Expense 月度开支
1639: [Usaco2007 Mar]Monthly Expense 月度开支 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 593 Solved: ...
- 【BZOJ】1639: [Usaco2007 Mar]Monthly Expense 月度开支(二分)
http://www.lydsy.com/JudgeOnline/problem.php?id=1639 同tyvj1359,http://www.cnblogs.com/iwtwiioi/p/394 ...
- BZOJ【1639】: [Usaco2007 Mar]Monthly Expense 月度开支
1639: [Usaco2007 Mar]Monthly Expense 月度开支 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 700 Solved: ...
- BZOJ1639: [Usaco2007 Mar]Monthly Expense 月度开支
1639: [Usaco2007 Mar]Monthly Expense 月度开支 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 529 Solved: ...
- 【二分答案】bzoj1639 [Usaco2007 Mar]Monthly Expense 月度开支
#include<cstdio> using namespace std; #define N 100001 int n,m,a[N]; bool check(int x) { int n ...
- bzoj 1637: [Usaco2007 Mar]Balanced Lineup
1637: [Usaco2007 Mar]Balanced Lineup Time Limit: 5 Sec Memory Limit: 64 MB Description Farmer John ...
- Bzoj 1703: [Usaco2007 Mar]Ranking the Cows 奶牛排名 传递闭包,bitset
1703: [Usaco2007 Mar]Ranking the Cows 奶牛排名 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 323 Solved ...
随机推荐
- Android开发百度地图(一)--显示基本地图
最近由于比赛的需要,自己学习了一下百度地图的开发.希望以下的内容能够对大家有用. 一.开发前的准备工作: 1.注册百度账号,并登录.(有百度账号的话直接登录) 2.申请Key,地址:http://de ...
- Jsp中三种注释
在Jsp中有三种注释: 一.HTML注释 1.输出注释<!-- -->客户端查看源码时是可以看见的. 二.Java注释 1. //单行注释 2. /*多行注释*/ 三.JSP页注释 1 ...
- day-5
/* 还有几半天了 上午考试暴力暴力暴力... 亏我还写了对拍 没有卵用 T2 差点事 T3不难却没咋么认真想 这tm就很尴尬了23333 下午整理题 一下午.... 晚上打月赛 + 单调队列 继续说 ...
- C#扫盲之:静态成员、静态方法、静态类、实例成员及区别
文章目录 1.静态成员.实例成员 2.静态类 3.类的静态成员和非静态成员区别 --------------------------------------分割线------------------- ...
- 20151207jquery 学习笔记 Ajax
.load()方法是局部方法,因为他需要一个包含元素的 jQuery 对象作为前缀.而$.get()和 $.post()是全局方法,无须指定某个元素.对于用途而言,.load()适合做静态文件的异步获 ...
- 经历:easyui的datagrid没有数据滚动条的显示
今天,一个用户提出一个这样的问题,"查询不到结果时,为什么我看不到后面的标题呢?" 最初,我听到这个问题时,第一反应是:查出来数据不就有滚动条了吗,干嘛非要较真呢? 不过,后来想想 ...
- oracle输出多行多列数据
--方法一 匿名块中直接 dbms_output输出declare v_sql varchar2(200); v_cursor sys_refcursor; type v_type is ...
- html表单 第四节
实例: <html> <head> <title>表单实例</title> </head> <body> <center& ...
- IntelliJ IDEA14 和 Maven 系列:使用IntelliJ IDEA 14和Maven 7 创建java web项目(一)
Intellij IDEA作为最好的Java IDE,创建Maven项目还是比较简单的,但是创建一个Maven Web项目还是要修改一些配置的,下面进行总结整理. 1前言 在创建项目中,IDEA提供了 ...
- 插入排序之python实现源码
def insert_sort(old): for i in range(1, len(old)): for j in range(i, 0, -1): if(old[j] < old[j-1] ...