题目链接:http://poj.org/problem?id=3273
题目大意:给n个数,把他们分成m组,使每组和的最大值最小
二分法。。呵呵呵呵呵呵呵呵呵呵
AC代码:
#include<stdio.h>
int money[100005];
int main()
{
int n,m,i,num,min=0,max,a,ans,mm;
scanf("%d%d",&n,&m);
for(i=0;i<n;i++)
{
scanf("%d",&money[i]);
if(money[i]>min)min=money[i];
max+=money[i];
}
while(min<max)
{
mm=0;
ans=0;
a=(min+max)/2;
for(i=0;i<n;i++)
{
mm+=money[i];
if(mm>a){mm=money[i];ans++;}
}
if(ans<m)max=a;
else min=a+1;//printf("%d %d %d\n",min,max,ans);
}
printf("%d",min);
return 0;
}
AC截图:
我对着女王大人的节操发誓,这绝对不是水题。。