牢大 • 18天前
using namespace std; int a[5005]; int n, m;
int solve(int mid) {
int cnt = 0, sum = 0;
for (int i = 1; i <= n; i++) {
if (sum + a[i] <= mid)
sum += a[i];
else {
cnt++;
sum = a[i];
}
}
return cnt + 1;
}
int main() {
cin >> n >> m;
int left = 0, right = 0;
for (int i = 1; i <= n; i++) {
cin >> a[i];
left = max(left, a[i]);
right += a[i];
}
int ans = 2147483647;
while (left <= right) {
int mid = (left + right) / 2;
if (solve(mid) > m) {
left = mid + 1;
} else {
right = mid - 1;
ans = min(ans, mid);
}
}
cout << ans;
return 0;
}
评论:
请先登录,才能进行评论