##80分第四个例子没过(想了几天,一直不明白)
查看原帖
##80分第四个例子没过(想了几天,一直不明白)
913932
Helen12楼主2023/4/24 20:46
#include<iostream>
using namespace std;
int n, m, a[100009];
int cha(int x)
{
	int i = 1, k = 0, y = 1;
	while (i <= n)
	{
		k += a[i];
		if (k > x)
		{
			k = a[i]; y++;
		}
		i++;
	}
	return y > m;
}
int main()
{
	cin >> n >> m;
	int ma = 0, sum = 0;
	for (int i = 1; i <= n; i++)
	{
		cin >> a[i];
		ma = max(a[i], ma);
		sum += a[i];
	}
	int s = ma, r = sum;
	if (!cha(s) && cha(s - 1))r = s;//ma是答案的情况
	else
		while (s < r - 1)
		{
			int t = s + (r - s) / 2;
			if (cha(t))
				s = t;
			else
				r = t;
		}
	cout << r;
}
2023/4/24 20:46
加载中...