思路:
枚举区间长度,起点,分割点。
#include<bits/stdc++.h>
using namespace std;
int a[300];
int dp[300][300];
int main()
{
int n;
cin>>n;
for(int i = 1; i <= n; i++)
{
cin>>a[i];
dp[i][i] = a[i];
}
int ans = 0;
for(int len = 1; len <= n; len++)
{
for(int i = 1; i + len-1 <= n; i++)
{
int end = i+len-1;
if(len > 2)
{
for(int k = i; k <= end; k++)
{
if(dp[i][k] == dp[k+1][end] && dp[i][k] != 0 && dp[k+1][end] != 0)
{
dp[i][end] = max(dp[i][end], dp[i][k]+1);
ans = max(ans,dp[i][end]);
}
}
}
else
{
if(a[i] == a[i+1])
dp[i][i+1] = a[i]+1;
}
}
}
printf("%d\n",ans);
}