Phalanx HDU - 2859 (矩阵DP)

Phalanx

HDU - 2859

题意:找出矩阵中以副对角线(左斜)为轴的最大对称子矩阵;

因为以副对角线为轴, 所以由右上角开始DP;


#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
const int maxn=100100;
int n;
int dp[1100][1100];
char a[1100][1100];
int main(){
	while(scanf("%d", &n), n){
		for(int i=1; i<=n; i++){
			scanf("%s", a[i]+1);
		}
		memset(dp, 0,sizeof(dp));
		int ans=1;
		for(int i=1; i<=n; i++){
			for(int j=n; j>0; j--){
				if(i==1||j==n){//i=1和j=n都表示长度为1的矩阵;
					dp[i][j]=1;
					continue;
				}
				int cnt=0;
				for(int k=1; i-k>0&&j+k<=n; k++){
					if(a[i-k][j]==a[i][j+k]) cnt++;
					else break;
				}
				if(cnt>=dp[i-1][j+1]) dp[i][j]=dp[i-1][j+1]+1;
				else dp[i][j]=cnt+1;
				ans=max(ans, dp[i][j]);
			}
		}
		printf("%d\n", ans);
	}
	return 0;
}




阅读更多
版权声明:欢迎大家指正错误,有不同观点的欢迎评论,共同进步 https://blog.csdn.net/Sirius_han/article/details/80345822
个人分类: 怒刷DP
上一篇Super Jumping! Jumping! Jumping! HDU - 1087(LIS)
下一篇Prince and Princess UVA - 10635(LCS转换LIS)
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭