题目:
题解:
二分
脑子gg了,二分边界处理的不是很好,wa了几次。
代码:
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
long long l=-1,r=500;
int n,cnt,sum,m;
long long a[100500];
bool check(long long x){
cnt=0;
sum=0;
for(int i=0;i<=n;i++){
if(a[i]>x) return false;
if(sum+a[i+1]>x) {
cnt++;
sum=a[i+1];
}
else sum+=a[i+1];
}
cnt++;
if(cnt<=m) return true;
return false;
}
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
scanf("%lld",&a[i]),l=max(l,a[i]),r+=a[i];
l--;
while(r-l>1){
long long mid=r+l>>1;
if(check(mid)) r=mid;
else l=mid;
}
printf("%lld",r);
return 0;
}