57902023-09-30 16:28:54zsomborMajomházcpp17Időlimit túllépés 40/1003.082s10220 KiB
#include <iostream>
#include <vector>
#include <fstream>
using namespace std;
using ll = long long;

int n, k;
vector <ll> a(1e5 + 1, 0);
vector <ll> p(1e5 + 1, 0);
vector <ll> dp(1e5 + 1, 0);
vector <ll> cnt(1e5 + 1, -1);

ll sum(int l, int r) {
    return p[r] - p[l - 1];
}

pair <ll, ll> do_dp(ll lam) {
    dp[0] = -lam;
    int last = 0;
    for (int i = 1; i <= n; i++) {
        dp[i] = 1e18;
        for (int j = last; j < i; j++) {
            ll cur = dp[j] + lam + sum(j + 1, i) * (i - j);
            if (cur > dp[i]) break;
            dp[i] = cur;
            cnt[i] = cnt[j] + 1;
            last = j;
        }
    }
    return {cnt[n], dp[n]};
}

pair <ll, ll> do_dp2(ll lam) {
    dp[0] = -lam;
    int last = 0;
    for (int i = 1; i <= n; i++) {
        dp[i] = 1e18;
        for (int j = 0; j < i; j++) {
            ll cur = dp[j] + lam + sum(j + 1, i) * (i - j);
            if (cur<=dp[i]){
                dp[i]=cur;
                cnt[i]=cnt[j]+1;
            }
        }
    }
    return {cnt[n], dp[n]};
}

int main() {
    cin >> n >> k;
    for (int i = 1; i <= n; i++) {
        cin >> a[i];
        p[i] = p[i - 1] + a[i];
    }

    /*fstream fajl;
    fajl.open("be2.txt");
    fajl >> n >> k;
    for (int i = 1; i <= n; i++) {
        fajl >> a[i];
        p[i] = p[i - 1] + a[i];
    }
    fajl.close();*/

    ll l = 0, r = 1e18, m;
    while (r - l > 1) {
        m = (l + r) / 2;
        (do_dp2(m).first >= k ? l = m : r = m);
    }
    cout << do_dp2(l).second - k * l;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva4ms7848 KiB
2Elfogadva1.937s8012 KiB
subtask210/10
3Elfogadva4ms8372 KiB
4Elfogadva4ms8412 KiB
5Elfogadva4ms8668 KiB
6Elfogadva4ms8884 KiB
7Elfogadva4ms9168 KiB
subtask310/10
8Elfogadva28ms9036 KiB
9Elfogadva28ms9168 KiB
10Elfogadva29ms9456 KiB
11Elfogadva28ms9644 KiB
12Elfogadva28ms9652 KiB
subtask420/20
13Elfogadva2.115s9780 KiB
14Elfogadva2.266s9960 KiB
15Elfogadva2.388s9740 KiB
16Elfogadva2.477s10004 KiB
17Elfogadva2.493s9948 KiB
18Elfogadva2.502s10220 KiB
subtask50/29
19Időlimit túllépés3.061s6524 KiB
20Időlimit túllépés3.065s6476 KiB
21Időlimit túllépés3.061s6476 KiB
22Időlimit túllépés3.073s6692 KiB
23Időlimit túllépés3.065s6680 KiB
subtask60/31
24Időlimit túllépés3.081s6688 KiB
25Időlimit túllépés3.078s6920 KiB
26Időlimit túllépés3.078s6900 KiB
27Időlimit túllépés3.082s6864 KiB
28Időlimit túllépés3.058s6908 KiB
29Időlimit túllépés3.076s7040 KiB
30Időlimit túllépés3.049s7324 KiB
31Időlimit túllépés3.065s7220 KiB
32Időlimit túllépés3.056s7084 KiB
33Időlimit túllépés3.062s7064 KiB
34Időlimit túllépés3.053s7268 KiB
35Időlimit túllépés3.042s7328 KiB
36Időlimit túllépés3.076s7356 KiB
37Időlimit túllépés3.065s7412 KiB
38Időlimit túllépés3.069s7416 KiB
39Időlimit túllépés3.025s7328 KiB
40Időlimit túllépés3.061s7380 KiB