为什么最后一个点过不去,感觉思路没有问题!
查看原帖
为什么最后一个点过不去,感觉思路没有问题!
644673
InORgAnIC_SAlt楼主2024/2/26 12:53
#include<bits/stdc++.h>
using namespace std;
const int maxv = 1e6+5;
typedef long long ll;
ll n, m, a[maxv];
bool check(ll mid){	// 检查加上下一个数会不会大于mid,因为mid要最小 
	ll cnt=0, sum=0;
	for(int i = 1; i <= n-1; i++){
		sum += a[i];
		if(sum + a[i+1] > mid){
			cnt ++;
			sum = 0;
		}
	}
	if(cnt+1<=m)	return 1;
	else return 0;
}
int main(void){
	cin >> n >> m;
	for(int i = 1; i <= n; i++)	cin >> a[i];	
	ll l = 1, r = 1e9;
	while(l < r){
		ll mid = (l+r) >> 1;
		if(check(mid))	r = mid;
		else	l = mid + 1;
	}
	cout << l;
	return 0;
}
2024/2/26 12:53
加载中...