求助,思路二分段数来求答案,为什么结果错误,希望有大神可以解答,十分感谢!
查看原帖
求助,思路二分段数来求答案,为什么结果错误,希望有大神可以解答,十分感谢!
36263
阿正楼主2020/10/2 22:50
/*
利用二分段数来求最小的最大值
*/ 

#include<bits/stdc++.h>
using namespace std;

const int maxn=1e+9+5;
//const int maxn=100000;
int a[10005];

int ans;
int n,m;

int work(int maxx){//按照数列分段1,给定最大值求最小段数 
	int cnt=1;
	int len=0;
	for(int i=1;i<=n;i++){
		if(len+a[i]<maxx){
			len+=a[i];
		}
		else if(len+a[i]==maxx){
			len=0;
			cnt++;
		}
		else if(len+a[i]>maxx){
			len=a[i];
			cnt++;
		}
	}
	return cnt;			
}

int mainwork(){//upper_bound 
	int left=1,right=maxn;
	
	while(left<right){
		int mid=(left+right)/2;
		if(work(mid)<m)//说明mid太大,段数小 
			right=mid;
		else 
			left=mid+1;			
	}
	return left-1;
}

int main(){
	scanf("%d %d",&n,&m);
	for(int i=1;i<=n;i++)
		scanf("%d",&a[i]);
		
	ans=mainwork();
	
	printf("%d\n",ans);	
	
	return 0;
}
2020/10/2 22:50
加载中...