题解
2024-05-01 21:53:19
发布于:上海
16阅读
0回复
0点赞
题解
#include<iostream>
#include<algorithm>
#include<numeric>
using namespace std;
const int N=1e5+6;
int main(){
int n,m;
cin>>n>>m;
int s[N]={};
for(int i=0;i<n;i++)cin>>s[i];
int left=*max_element(s,s+n),right=accumulate(s,s+n,0),mid,ans=0;
while(left<=right){
int c=1,d=0;
mid=(left+right)/2;
for(int i=0;i<n;i++){
if(d+s[i]<=mid)d+=s[i];
else d=s[i],c++;
}if(c<=m)ans=mid,right=mid-1;
else left=mid+1;
}cout<<ans<<endl;
return 0;
}
这里空空如也
有帮助,赞一个