http://noi.openjudge.cn/ch0111/06/
就是测不过,网上的标程也不能过,求救!
#include <bits/stdc++.h>
#define int long long
using namespace std;
int n,m,x[100009],l,r,ans,l0;
bool judge(int mid){
if (mid<l0) return false;
int cnt=0,pre=0;
for (int i=1;i<=n;++i){
pre+=x[i];
if (pre>mid) ++cnt,pre=x[i];
}
if (cnt>m) return false;
else return true;
}
signed main(){
cin>>n>>m;for (int i=1;i<=n;++i) cin>>x[i],r+=x[i];l=l0=*max_element(x+1,x+n+1);
while (l<r){
int mid=(l+r)/2;
if (judge(mid)) r=mid,ans=mid;
else l=mid+1;
}
while (judge(ans-1)) --ans;
printf("%lld",ans);
return 0;
}