题解 P3146 [USACO16OPEN]248 G
题解
有
初始
if (f[i][k] == f[k + 1][j])
f[i][j] = max(f[i][k] + 1, f[i][j]);
其中
时间复杂度
代码
#include <bits/stdc++.h>
#define MAXN 250
using namespace std;
int n, ans;
int a[MAXN], f[MAXN][MAXN];
int main() {
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
scanf("%d", &a[i]);
f[i][i] = a[i];
}
for (int len = 1; len <= n; len++) {
for (int i = 1; i <= n - len + 1; i++) {
int j = i + len - 1;
for (int k = i; k <= j; k++) {
if (f[i][k] == f[k + 1][j]) {
f[i][j] = max(f[i][j], f[i][k] + 1);
ans = max(f[i][j], ans);
}
}
}
}
cout << ans << endl;
return 0;
}
日拱一卒,功不唐捐