Submission #1137234

#TimeUsernameProblemLanguageResultExecution timeMemory
1137234sohamsen15Feast (NOI19_feast)C++20
43 / 100
1095 ms5200 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; 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 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...