这是我自己看小白书上的思路,理解之后敲的;个人感觉和其他人的代码相比挺短的(呵,大言不惭了);
#include<cstdio>
const int maxn=1000+5;
int n,m,num[maxn];
bool p(int x)
{
int sum=0,cnt=1;
for(int i=0;i<n;i++){
if(num[i]>x&&cnt<=m)return false;
if(sum+num[i]>x){ //体现了贪心的思想
sum=0;cnt++;
}
sum+=num[i];
}
if(cnt<=m)return true;
return false;
}
int main()
{
while(~scanf("%d%d",&n,&m)){
int sum=0;
for(int i=0;i<n;i++){
scanf("%d",&num[i]);
sum+=num[i];
}
printf("sum:%d\n",sum);
int a=sum,b=0,mid=(a+b+1)>>1;
while(a>b){
printf("a:%d,b:%d\n",a,b);
if(p(mid))a=mid;
else b=mid+1;
mid=(a+b+1)>>1;
}
printf("%d\n",a);
}
return 0;
}