xhk2000的专栏

谁加个qq:3143543880

月度开销

月度开销

农夫约翰是一个精明的会计师。他意识到自己可能没有足够的钱来维持农场的运转了。他计算出并记录下了接下来 N (1 ≤ N ≤ 100,000) 天里每天需要的开销。

约翰打算为连续的M (1 ≤ MN) 个财政周期创建预算案,他把一个财政周期命名为fajo月。每个fajo月包含一天或连续的多天,每天被恰好包含在一个fajo月里。

约翰的目标是合理安排每个fajo月包含的天数,使得开销最多的fajo月的开销尽可能少

note:当我们不确定答案是l或者r或者mid,可以通过if语句在输出的时候判断一下

#include<stdio.h>
#include<iostream>
using namespace std;
int n,m;
int a[1000010];
int C(int val)
{
int temp=0;
int num=1;
for(int i=1;i<=n;i++)
{
if(a[i]>val)return 0;
if(temp+a[i]<=val)
{
temp+=a[i];
}
else
{
temp=a[i];
num++;
}
}
if(num<=m)return 1;
else return 0;
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
{
scanf("%d",a+i);
}
int l=0;
int r=1e9+1;
int mid=0;
while(r-l>1)
{
mid=(l+r)/2;
if(C(mid))r=mid;
else l=mid;
}
if(C(r))cout<<r<<endl;
else cout<<mid<<endl;
return 0;
}


阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xhk2000/article/details/52347203
个人分类: 二分
上一篇深度优先搜索
下一篇跳石头
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭