#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;
for (auto x: a) if (x < 0) positive = false;
if (positive) {
ll sum = 0;
for (auto x: a) sum += x;
cout << sum << "\n";
} else {
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 cout << solve(n, k - 1) << "\n";
}
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |