题解
2025-07-31 16:14:06
发布于:新疆
4阅读
0回复
0点赞
#include <bits/stdc++.h>
using namespace std;
const int N=2e5+10;
int n,k;
int w[N];
bool check(long long mid){
long long res=0;
long long sum=0;
for(int i=1;i<=n;i++){
if(sum+w[i]>mid){
res++;
sum=w[i];
}
else sum+=w[i];
}
if(sum) res++;
return res<=k;
}
int main(){
cin>>n>>k;
for(int i=1;i<=n;i++) cin>>w[i];
long long int l=*max_element(w+1,w+n+1),r=1e14+5;//一定范围内找最大值
while(l<r){
long long mid=l+r>>1;//(l+r)/2
if(check(mid)) r=mid;
else l=mid+1;
}
cout<<l<<endl;
return 0;
}
这里空空如也
有帮助,赞一个