第2 - N + 1行:数组元素(1 <= A ii <= 10^9)Output输出这个最小的最大值。Sample Input
6 3 1 2 3 4 5 6Sample Output
9
题解:二分加贪心,多购建几个函数,注意用long long
代码(C语言)
#include <stdio.h>
#include <stdlib.h>
int n,k;
long long sum,a[50010];
int check(long long t,int k)
{
int i;
long long sum;
for(i=0;i<n;i++){
if(sum+a[i]>t){sum=a[i]; k--;}
else sum+=a[i];
}
if(k>0) return 1;
return 0;
}
long long find(long long l,long long r)
{
long long mid;
while(l<r){
mid=(l+r)>>1;
if(check(mid,k)) r=mid;
else l=mid+1;
}
return l;
}
int main()
{
int i;
while(scanf("%d%d",&n,&k)!=EOF){
for(i=0,sum=0;i<n;i++){
scanf("%lld",&a[i]);
sum+=a[i];
}
printf("%lld\n",find(1,sum));
}
return 0;
}