Submission #1263407

#TimeUsernameProblemLanguageResultExecution timeMemory
1263407baodatFeast (NOI19_feast)C++20
59 / 100
161 ms327680 KiB
#include <bits/stdc++.h> using namespace std; using int64 = long long; const int64 NINF = (int64)-4e18; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int n, k; if (!(cin >> n >> k)) return 0; vector<int64> a(n + 1); for (int i = 1; i <= n; ++i) cin >> a[i]; // dp_in[i][t]: best sum using first i, started exactly t segments, currently inside // dp_out[i][t]: ... currently outside vector<vector<int64>> dp_in(n + 1, vector<int64>(k + 1, NINF)); vector<vector<int64>> dp_out(n + 1, vector<int64>(k + 1, NINF)); dp_out[0][0] = 0; for (int i = 1; i <= n; ++i) { for (int t = 0; t <= k; ++t) { // be outside at i: stay outside or close a segment dp_out[i][t] = max(dp_out[i - 1][t], dp_in[i - 1][t]); // be inside at i: extend, or start now (if we still can start) if (dp_in[i - 1][t] != NINF) dp_in[i][t] = max(dp_in[i][t], dp_in[i - 1][t] + a[i]); if (t > 0 && dp_out[i - 1][t - 1] != NINF) dp_in[i][t] = max(dp_in[i][t], dp_out[i - 1][t - 1] + a[i]); } } int64 ans = NINF; for (int t = 0; t <= k; ++t) ans = max(ans, max(dp_in[n][t], dp_out[n][t])); cout << ans << "\n"; return 0; }
#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...