#include <bits/stdc++.h>
using namespace std;
int n,ans;
int a[250];
int f[250][250];
int main()
{
cin>>n;
for(int i = 1;i <= n;i ++)
cin>>a[i],f[i][i] = a[i];
for(int len = 2;len <= n;len ++)
for(int i = 1;i + len - 1 <= n;i ++)
{
int l = i,r = i + len - 1;
for(int k = i;k < r;k ++)
if(f[l][k] == f[k + 1][r] && f[l][k])
f[l][r] = max(f[l][r],f[l][k] + 1);
}
for(int i = 1;i <= n;i ++)
for(int j = 1;j <= n;j ++)
ans = max(ans,f[i][j]);
cout<<ans<<'\n';
return 0;
}
(本人已A,代码如上) 疑问:f[l][r]存储max,后续在更新时用f[l][r]更新(即[l,r]的max)是否不妥?会不会出现不用max才能更新,且全部更新完后新的max比(f[l][r])max更大的情况