虽然数据的通过情况是4 / 7,但我怀疑是数据的问题,如果是代码的问题,那么请大佬们一定要为我指出,感谢!
题意:一个长度为n的序列,最多“切割(即连续地划分)”成m组,对这些组分别求组内元素和,问这些组内元素和的最小值是多少。
思路:二分答案
代码:
#include <iostream>
using namespace std;
const int N = 1000010;
int n, m;
int a[N];
bool check (int x) { // 判断答案为 x 时可不可以
int sum = 0, cnt = 0;
for (int i = 1; i <= n; ++ i) { // 简单的划分过程
if (sum + a[i] <= x) {
sum += a[i];
} else {
++ cnt;
sum = a[i];
}
}
++ cnt;
return cnt <= m;
}
int main () {
scanf("%d%d", &n, &m);
for (int i = 1; i <= n; ++ i) scanf("%d", &a[i]);
int l = 0, r = 0;
for (int i = 1; i <= n; ++ i) { // 确定二分的上下界
l = max(l, a[i]);
r += a[i];
}
while (l < r) {
int mid = l + r >> 1;
if (check(mid) == true) {
r = mid;
} else {
l = mid + 1;
}
}
printf("%d", l);
return 0;
} 
京公网安备 11010502036488号