传送门
#include<cstdio> #define N 110000 long long n,m,sum=0,ans,max=0; long long a[N]; void find(long long l,long long r) {if (l>r) return;long long mid=(l+r)/2,s=0,k=0;for (int i=1;i<=n;i++){s+=a[i];if (s>mid) k++,s=a[i];}if (s) k++;if (k>m) find(mid+1,r);else ans=mid,find(l,mid-1); } int main() {scanf("%lld%lld",&n,&m);/*这里又被坑了一下午前面n,m定义的long long,读入的时候“%d”整成这玩意。以后注意!以后注意!以后注意! */ for (int i=1;i<=n;i++){scanf("%lld",&a[i]);if (a[i]>max) max=a[i];sum+=a[i];}find(max,sum);printf("%lld",ans);return 0;}