题解
2025-07-14 15:36:47
发布于:广东
2阅读
0回复
0点赞
#include <bits/stdc++.h>
using namespace std;
long long n,m,a[100010];
bool check(long long x){
long long cnt=1,sum=0;
for (int i=1;i<=n;i++){
if (a[i] > x) return false;
if (a[i]+sum <= x){
sum+=a[i];
}else{
sum=a[i];
cnt++;
}
}
return cnt<=m;
}
long long ans_find(long long l,long long r){
long long ans;
while(l<=r){
long long mid=(l+r)/2;
if (check(mid)){
ans=mid;
r=mid-1;
}else{
l=mid+1;
}
}
return ans;
}
int main(){
long long maxn=1e13;
cin >> n>>m;
for (int i=1;i<=n;i++){
cin >> a[i];
}
cout << ans_find(1,maxn);
return 0;
}
这里空空如也
有帮助,赞一个