把n个数放进m个盒子,求能满足的盒子里面最大的数值的最小值。
#include<iostream>
#include<string.h>
#include<algorithm>
int a[11000];
int n,m;
using namespace std;
bool dd(int x)
{
int sum=0;
int num=0;
for(int i=0;i<n;i++)
{
sum+=a[i];
if(sum>x)
{
sum=a[i];
num++;
}
}
if(num>m-1)
return false;
else return true;
}
int main()
{
while(cin>>n>>m)
{
int sum=0;
int min_a=0;
for(int i=0;i<n;i++)
{
cin>>a[i];
sum+=a[i];
}
int left=min_a;
int right=sum;
while(right>left+1)
{
int mid=(right+left)/2;
if(dd(mid)) right=mid;
else left=mid;
}
cout<<right<<endl;
int num=0;
int max_a=100000;
}
}