http://poj.org/problem?id=3273
解题思路:
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define max 100001
int day[max];
int n,m;
int main()
{
int i,j;
int sum,cnt,ma,low,high,mid;
while(~scanf("%d %d",&n,&m))
{
memset(day,0,sizeof(day));
sum=0;
ma=0;
for(i=0;i<n;i++)
{
scanf("%d",&day[i]);
if(day[i]>ma)
{
ma=day[i];
}
sum+=day[i];
}
low=ma;
high=sum;
while(low<=high)
{
mid=(low+high)/2;
sum=0;
cnt=1;
for(i=0;i<n;i++)
{
sum+=day[i];
if(sum>mid)
{
sum=day[i];
cnt++;
}
}
if(cnt<=m)
{
ma=mid;
high=mid-1;
}
else
low=mid+1;
}
printf("%d\n",ma);
}
return 0;
}