P3146求问
  • 板块题目总版
  • 楼主a202401006
  • 当前回复0
  • 已保存回复0
  • 发布时间2025/1/22 22:55
  • 上次更新2025/1/23 10:26:21
查看原帖
P3146求问
1497110
a202401006楼主2025/1/22 22:55

原题:题目传送门

于第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);//输出 
}
2025/1/22 22:55
加载中...