以下题意参考链接
给你一个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);
}
}