#include <bits/stdc++.h>
using namespace std;
int main() {
cin.tie(0)->sync_with_stdio(0);
int n; cin >> n;
vector<int> a(n); for (int i = 0; i < n; i++) cin >> a[i];
vector<int> f(n), r(n);
f[0] = r[n-1] = 0;
for (int i = 1; i < n; i++) {
int dx = (a[i-1] + f[i-1] + 1) - (a[i]);
f[i] = max(0, dx);
int dy = (a[n-i] + r[n-i] + 1) - (a[n-i-1]);
r[n-i-1] = max(0, dy);
}
vector<int> DP1(n+1, 0);
for (int i = 0; i <= n; i++) {
vector<int> f2(n); for (int j = 0; j < n; j++) f2[i] = (j < i ? f[i] : r[i]);
int t = 0, s = accumulate(f2.begin(), f2.end(), 0);
while (s > 0) {
int best = -1, l = -1, r = -1, prev = -1;
for (int j = 0; j <= n; j++) {
if (f2[j] != 0 && j != n) continue;
if (j-prev > best) {
best = j-prev; l = prev; r = j;
}
prev = j;
}
for (int j = l+1; j < r; j++) {
s--; f2[j]--;
}
t++;
}
DP1[i] = t;
}
cout << *max_element(DP1.begin(), DP1.end());
return 0;
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |