20分求助

BJSY_ZBH 2024-04-10 19:34:13 2 返回题目

九敏我20分……

哪位帮一下

#include <bits/stdc++.h>
#define ll long long
using namespace std;
ll n, m;
ll a[10000010];
bool check(ll x) {
    ll sum = 0;
    ll cnt = 1;
    for (int i = 1; i <= n; i++) {
        sum += a[i];
        if (sum > x) {
            sum = a[i];
            cnt++;
        }
    }
    if (cnt <= m)
        return 1;
    return 0;
}
int bs(ll l, ll r) {
    while (l + 1 < r) {
        ll mid = (l + r) / 2;
        if (check(mid))
            r = mid;
        else
            l = mid;
    }
    if (check(l))
        return l;
    return r;
}
int main() {
    cin >> n >> m;
    ll l = 0, r = 0;
    for (int i = 1; i <= n; i++) {
        cin >> a[i];
        l = max(l, a[i]);
        r += a[i];
    }
    cout << bs(l, r);
    return 0;
}
{{ vote && vote.total.up }}