http://poj.org/problem?id=3273
#include<iostream>
using namespace std;
int n,m;
bool erfen(int mid,int money[])
{
int i,j;
int sum=0;
int couse=1;
for(i=0;i<n;i++)
{
if(sum+money[i]<mid)
{
sum+=money[i];
}
else{
sum=money[i];
++couse;
}
}
if(couse>m)
return false;
else return true;
}
int main()
{
while(cin>>n>>m){
int i;
int money[100005];
int low=0;
int high=0;
for(i=0;i<n;i++)
{
cin>>money[i];
high+=money[i];
if(low<money[i])
low=money[i];
}
int mid=(low+high)>>1;
while(low<high)
{
if(erfen(mid,money))
high=mid-1;
else
low=mid+1;
mid=(low+high)>>1;
}
cout<<mid<<endl;
}
return 0;
}
浙公网安备 33010602011771号