https://oj.jdfz.com.cn/oldoj/problem.php?id=2225
一定要求出二分的范围(最小值和最大值)!!!
#include<stdio.h>
int n,m;
int num[100005];
int trynum(int x)
{
int sum=0;
int cnt=0;
for(int i=1;i<=n;i++)
{
sum+=num[i];
if(sum>x)
{
cnt++;
sum=num[i];
}
}
cnt++;
if(cnt>m)return 0;
return 1;
}
int search(int l,int r)
{
if(l==r) return l;
else
{
int mid=(l+r)>>1;
if(trynum(mid))
{
return search(l,mid);
}
else
{
return search(mid+1,r);
}
}
}
int search1(int l,int r)
{
int mid;
while(l<r)
{
mid=(l+r)>>1;
if(trynum(mid)==0) l=mid+1;
else r=mid;
}
return r;
}
int main()
{
scanf("%d%d",&n,&m);
int i;
int sum=0,max=0;
for(i=1;i<=n;i++)
{
scanf("%d",&num[i]);
sum+=num[i];
if(max<num[i]) max=num[i];
}
printf("%d",search1(max,sum));
return 0;
}
/*
附数据
7 7
100
400
300
100
500
101
400
*/