#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> PII;
typedef pair<double,double> PDD;
const int mod = 1e8;
using ull = unsigned long long;
int n;
int a[300010];
int dp[2500][2500];
int res = 0 ;
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
dp[i][i] = a[i];
res = max(res,a[i]);
}
for(int len=1;len<=n;len++){
for(int i=1;i<=n-1;i++){
int j = i + len -1;
for(int k=i;k<j;k++){
if(dp[i][k] == dp[k+1][j] && dp[i][k] > 0){
dp[i][j] = max(dp[i][j] , dp[i][k] + 1);
res = max(res,dp[i][j]);
}
}
}
}
// 1 2 3 4 1 2 3 4
cout<<res;
}
枚举区间的长度,从小的区间逐渐转移到大的区间,感觉好像挺水的
//1 2 3 4 1 2 3 4 由于不存在可以转移的方案 所以最大值是再初始的数据里,读入的时候就对res进行维护