只想说一句:二分查找的时候注意:要确定上下界,而我是l=0,r=INF 二分的,wa了许多次
#include<stdio.h>
#define INF 0x3f3f3f3f
int N,M,d[100000+16];
int judge(int x)
{
int ans=0,cnt=1,i;
for(i=0;i<N;i++)
{
ans+=d[i];
if(ans>x)
{
cnt++;
ans=d[i];
}
}
if(cnt>M)
return 0;
else
return 1;
}
int main()
{
int i,l=0,r=0,m;
scanf("%d%d",&N,&M);
for(i=0;i<N;i++)
{
scanf("%d",&d[i]);
r+=d[i];
if(d[i]>l)
l=d[i];
}
while(l<r)
{
m=(l+r)/2;
if(judge(m))
r=m;
else
l=m+1;
}
printf("%d\n",l);
}