Submission #475572

#TimeUsernameProblemLanguageResultExecution timeMemory
475572flashmtTortoise (CEOI21_tortoise)C++17
48 / 100
3085 ms143712 KiB
#include <bits/stdc++.h> using namespace std; const int oo = 1 << 30; int main() { ios_base::sync_with_stdio(0); cin.tie(0); int n; cin >> n; vector<int> a(n); for (int i = 0; i < n; i++) cin >> a[i]; vector<int> l(n), r(n); for (int i = 0, last = -oo; i < n; i++) if (a[i] < 0) last = i; else l[i] = last; for (int i = n - 1, last = oo; i >= 0; i--) if (a[i] < 0) last = i; else r[i] = last; if (n > 5000) return 0; int mx = (n * 3 + 1) / 2; vector<vector<int>> f(n, vector<int>(mx + 1, oo)); for (int i = 0; i < n; i++) if (a[i] > 0) { f[i][0] = i; for (int ii = 0; ii < i; ii++) if (a[ii] > 0) for (int j = 0; j <= mx; j++) if (f[ii][j] <= ii * 2) { f[i][j] = min(f[i][j], f[ii][j] + i - ii); if (j < mx) { if (r[ii] < n) f[i][j + 1] = min(f[i][j + 1], f[ii][j] + r[ii] - ii + abs(i - r[ii])); if (l[ii] >= 0) f[i][j + 1] = min(f[i][j + 1], f[ii][j] + ii + i - 2 * l[ii]); } } int d = min(r[i] - i, i - l[i]); for (int j = mx - 1; j >= 0; j--) { int cur = f[i][j]; for (int jj = 1; jj < a[i]; jj++) { cur += d * 2; if (cur > i * 2) break; f[i][j + jj] = min(f[i][j + jj], cur); } } } int ans = 0, total = 0; for (int i = 0; i < n; i++) { for (int j = 0; j <= mx; j++) if (f[i][j] <= i * 2) ans = max(ans, j + 1); if (a[i] > 0) total += a[i]; } cout << total - ans << endl; }
#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...