P3146 [USACO16OPEN]248 G (区间DP)

P3146 [USACO16OPEN]248 G (区间DP)

题目传送门

思路:

AC代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=300;
int a[N],dp[N][N];
int main(){
	int n;
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
		scanf("%d",&a[i]),dp[i][i]=a[i];
	int ans=0;
	for(int len=2;len<=n;len++)
		for(int l=1,r=l+len-1;r<=n;l++,r++)
		{
			for(int k=l;k<r;k++)//分割区间 k是左部分区间右端. 
			{
				//printf("dp[%d][%d]=%d,dp[%d][%d]=%d\n",l,k,dp[l][k],k+1,r,dp[k+1][r]);
				if(dp[l][k]==dp[k+1][r]&&dp[l][k])
				{
					 dp[l][r]=max(dp[l][r],dp[l][k]+1);
					 ans=max(dp[l][r],ans);
				}
				/*printf("dp[%d][%d]=%d\n",l,r,dp[l][r]); puts(""); */
			}
		}
	printf("%d\n",ans);
	return 0;
}
全部评论

相关推荐

11-04 19:05
已编辑
东莞城市学院 单片机
不知道怎么取名字_:你这个要实习两年?哪有这么久的,感觉就是即使你毕业了,但还按实习的话,是不是不用给你缴社保公积金啥的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务