二分答案
2026-04-26 11:29:26
发布于:浙江
8阅读
0回复
0点赞
二分答案
#include<bits/stdc++.h>
using namespace std;
int n,m,a[100005];
bool check(int x){//判断能否有一种划分方案,使得每个区间都小于等于x
long long sum=0,cnt=1;
for(int i=1;i<=n;i++){
if(sum+a[i]<=x){
sum+=a[i];
}else if(a[i]>x){
return false;
}else{
sum=0;
cnt++;
sum+=a[i];
}
}
return cnt<=m;
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i];
}
//二分
int l=0,r=1e9;
while(l<r){
int mid=(l+r)/2;/*左区间最右端点
int mid=(l+r+1)/2; 右区间最左端点*/
if(!check(mid)){
l=mid+1;
}else{
r=mid;
}
}
cout<<l;
return 0;
}
全部评论 2
ddd
1周前 来自 浙江
0ddd
1周前 来自 浙江
0








有帮助,赞一个