一度停更,今天恢复。
一下。
哈哈
大致题意:
给出农夫在n天中每天的花费,要求把这n天分作m组,每组的天数必然是连续的,要求分得各组的花费之和应该尽可能地小,最后输出各组花费之和中的最大值
最大值的最小化。二分吗!
处理没啥主意的,check脑子转个弯就ok
一A
#include<cstdio>
#include<algorithm>
#include<cstring>
//by mars_ch
using namespace std;
int n,m;
int c[100005];
int maxx;
long long sum;
bool check(int x)
{
long long res=0;
int cnt=1;
for(int i=1;i<=n;i++)
{
res+=c[i];
if(res>x)
{
cnt++;
res=c[i];
}
}
if(cnt > m) return false;
else return true;
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
{
scanf("%d",&c[i]);
sum+=c[i];
maxx=max(c[i],maxx);
}
int l=maxx,r=sum,ans=0;
while(l<=r)
{
int mid=(l+r)/2;
if(check(mid))
{
r=mid-1;
ans=mid;
}
else l=mid+1;
}
printf("%d\n",ans);
return 0;
}