赞
踩
以下题意参考链接
给你一个nn的字符矩阵,从中选出一个最大的子矩阵(mm)满足关于斜对角线(左下角到右上角)对称,求出这个矩阵的大小m;
我们可以用dp[i][j]表示当前位置到右上角这个子矩阵所能表示对称的矩阵最大值;
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; int dp[1005][1005]; int n; char m[1005][1005]; int main() { while(scanf("%d",&n)!=EOF&&n) { for(int i=0;i<n;i++) scanf("%s",&m[i]); int ans=1; memset(dp,0,sizeof(dp)); int a,b,k; for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ if(i==0){ dp[i][j]=1; continue; } a=i,b=j; while(m[a][j]==m[i][b]){//注意这里的处理 if(a>=0&&b<n){ a--;b++; } else break; } k=i-a; if(k>dp[i-1][j+1]) dp[i][j]=dp[i-1][j+1]+1; else dp[i][j]=k; ans=max(dp[i][j],ans); } } printf("%d\n",ans); } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。