测评记录
已经改的和题解差不多了……
#include <bits/stdc++.h>
#define int long long
using namespace std;
int n, f[800][800], ans;
signed main() {
ios::sync_with_stdio(0);
cin.tie(0), cout.tie(0);
cin >> n;
for (int i = 1; i <= n; i++) cin >> f[i][i], ans = max(f[i][i], ans);
for (int l = 2; l <= n; l++) {
for (int i = 1; i + l - 1 <= n; i++) {
int j = i + l - 1;
for (int k = i; k < j; k++) {
if (f[i][k] == f[k + 1][j] && f[i][k] && f[k + 1][j]) {
f[i][j] = max(f[i][k] + f[k + 1][j], f[i][j]);
break;
}
}
for (int h = i, t = j; h <= t; ) {
if (f[h][t]) break;
if (!f[i][h]) ++h;
else if (!f[t][j]) --t;
else if (f[i][h] == f[t][j]) {
if (f[h + 1][t - 1]) {
f[i][j] = max(f[i][h] + f[t][j] + f[h + 1][t - 1], f[i][j]);
}
else ++h, --t;
}
else if (f[i][h] < f[t][j]) ++h;
else if (f[i][h] > f[t][j]) --t;
}
ans = max(ans, f[i][j]);
}
}
cout << ans << '\n';
return 0;
}