二分下答案就好了。
#include<bits/stdc++.h>
using namespace std;
const int MAXN=50050;
long long n,k;
long long a[MAXN];
bool judge(long long limit)
{
long long sum=1,now=0,i;
for(i=1;i<=n;i++)
{
if(a[i]>limit)
return 0;
if(now+a[i]>limit)
{
sum++;
now=a[i];
}
else
now+=a[i];
}
return sum<=k;
}
int main()
{
long long i,lef,rig,mid;
while(~scanf("%d%d",&n,&k))
{
for(i=1;i<=n;i++)
scanf("%lld",&a[i]);
lef=0;rig=1ll<<50;
while(lef<=rig)
{
mid=(lef+rig)>>1;
if(judge(mid))
rig=mid-1;
else
lef=mid+1;
}
printf("%lld\n",lef);
}
}