挑战程序设计2的
allocation
#include<iostream>
#include<cstdio>
using namespace std;
int a[100001];
int k,n;
int panduan(int mid)
{
int j=0,i;
for(i=0;i<k;i++)
{
long long sum=0;
while(sum+a[j]<=mid)
{
sum+=a[j];
j++;
if(j==n)
return n;
}
}
return i;
}
int main ()
{
scanf("%d%d",&n,&k);
int i;
for(i=0;i<n;i++)
cin>>a[i];
long long mid,l,r;
l=0;r=10000000000;
while(l<r)
{
mid=(r-l)/2+l;
if(panduan(mid)>=n)
r=mid;
else
l=mid+1;
}
printf("%d\n",r);
}