原题:题目传送门
于第22和23行看不懂...求大佬的解释。
#include<bits/stdc++.h>
using namespace std;
const int N=260;
int n,a[N],ans;
int dp[N][N];//初始化
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);//输入
dp[i][i]=a[i];//转移
ans=max(ans,a[i]);//存储目前的最大值,以免后期全部无法合并
}
for(int i=2;i<=n;i++)//左端点
{
for(int j=1;j+i-1<=n;j++)//区间长度
{
int ls=i+j-1;//右端点
for(int k=i;k<ls;k++)//中心点,可以等于左端点,但不能大于等于右端点
{
if(dp[i][k]==dp[k+1][ls]&&dp[i][i]>0)//dp[i][k]==dp[k+1][ls]判断是否合并。
/*dp[i][i]>0是什么?*/
{
dp[i][ls]=max(dp[i][ls],dp[i][k]+1);//合并
ans=max(ans,dp[i][ls]);//记录最大值
}
}
}
}
printf("%d",ans);//输出
}