제출 #1137238

#제출 시각아이디문제언어결과실행 시간메모리
1137238sohamsen15Feast (NOI19_feast)C++20
51 / 100
1093 ms2876 KiB
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using pii = pair<int, int>;
using pll = pair<ll, ll>;

vector<ll> a;
map<pii, ll> memo;

ll solve(ll idx, ll left) {
    if (memo.count({idx, left})) return memo[{idx, left}];
    ll ret = 0;
    for (ll i = 0; i < idx; i++) {
        ll ans = 0;
        if (left != 0) ans += solve(i, left - 1);

        ll curr = a[i + 1], best = a[i + 1];
        for (ll j = i + 2; j <= idx; j++) {
            curr = max(curr + a[j], a[j]);
            best = max(best, curr);
            if (curr < 0) curr = 0;
        }

        ans += best;
        ret = max(ret, ans);
    }
    memo[{idx, left}] = ret;
    return ret;
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);

    ll n, k; cin >> n >> k; a.resize(n + 1);
    for (ll i = 1; i <= n; i++) cin >> a[i];

    bool positive = true; ll number = 0;
    for (auto x: a) {
        if (x < 0) {
            positive = false; 
            number++;
        }
    }

    if (k == 1) {
        ll curr = a[1], best = a[1];
        for (ll i = 2; i <= n; i++) {
            curr = max(curr + a[i], a[i]);
            best = max(best, curr);
        }
        cout << best << "\n";
    } else if (positive) {
        ll sum = 0;
        for (auto x: a) sum += x;
        cout << sum << "\n";
    } else if (number == 1) {
        ll sum = 0;
        for (auto x: a) sum += max((ll) 0, x);
        cout << sum << "\n";
    } else {
        cout << solve(n, k - 1) << "\n";
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...