Submission #1299367

#TimeUsernameProblemLanguageResultExecution timeMemory
1299367MatthewwwwTortoise (CEOI21_tortoise)C++17
0 / 100
0 ms332 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define f first #define s second #ifdef LOCAL #define err cerr #else #define err if (0) cerr #endif signed main() { ios::sync_with_stdio(false); cin.tie(0); int n; cin >> n; int ans = -n; vector<int> vt(n); for (int &i: vt) cin >> i; vector<vector<pair<int, int>>> dp(8*n, vector<pair<int, int>>(n+1, {-n, -n})); int prev = -n-n-n; vector<int> next(n, n+n+n+n+n); next.back() = vt.back() < 0 ? n-1 : next.back(); for (int i = n-1; i--;) next[i] = vt[i] < 0 ? i : next[i+1]; dp[0][0] = {0, 0}; for (int j = 0; j < n; j++) for (int i = 0; i < 8*n; i++) { if (vt[j] < 0) { dp[i][j].f = dp[i][j].s = max(dp[i][j].f, dp[i][j].s); ans = max(ans, dp[i][j].f); if (i < 4*n) { dp[i+1][j+1].f = max(dp[i+1][j+1].f, dp[i][j].f); dp[i+1][j+1].s = max(dp[i+1][j+1].s, dp[i][j].s); } prev = j; } else { // go left if (i < 4*n) { if (next[j] < n) { dp[i][j].s = max(dp[i][j].f, dp[i][j].s); int d = next[j]-j; if (i-d >= 0) dp[i][j].s = max(dp[i][j].s, dp[i-d][next[j]].f); for (int b = 1; (i+(b-1)*d*2) <= j*2 && b <= vt[j]; b++) dp[i+d*b*2-d][next[j]].f = max(dp[i+d*b*2-d][next[j]].f, dp[i][j].s+b); } dp[i+1][j+1].f = max(dp[i+1][j+1].f, dp[i][j].f); if (prev >= 0) { int d = j-prev; for (int b = 1; (i+(b-1)*d*2) <= j*2 && b <= vt[j]; b++) { // process .s first dp[i+d*b*2+1][j+1].f = max(dp[i+d*b*2+1][j+1].f, dp[i][j].f+b); if (next[j] < n) dp[i+d*b*2-d-d+next[j]-j][next[j]].f = max(dp[i+d*b*2-d-d+next[j]-j][next[j]].f, dp[i][j].f+b); } } } ans = max(ans, dp[i][j].f); ans = max(ans, dp[i][j].s); } } for (int i = 0; i < 8*n; i++) ans = max(ans, max(dp[i][n].f, dp[i][n].s)); int tot = 0; for (int i: vt) if (i > 0) tot += i; cout << tot-ans << "\n"; } // no llama :(
#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...