题意:给了一个字符串矩阵,求以次对角线方向对称的最大对称矩阵。
思路 : 我是从右上角开始求的,每次只需求最外面一层对称个数sum,再和右上角对称矩阵大小加一取最小就行,就求出当前小矩阵的最大对称矩阵。最后取个所有对称矩阵大小的最大值就行。
dp[i][j] = min(sum,dp[i-1][j+1]+1);
具体代码:
<span id="transmark"></span>#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<vector>
#include<queue>
#include<stack>
using namespace std;
#define INF 0x3f3f3f3f
typedef long long LL;
const int maxn = 1e3+100;
char A[maxn][maxn];
int dp[maxn][maxn];
int main()
{
int n;
while(scanf("%d",&n)!=EOF&&n)
{
memset(dp,0,sizeof(dp));
int i,j,k;
for(i=1;i<=n;i++)
scanf("%s",A[i]+1);
int ans=0;
for(i=1;i<=n;i++)
{
for(j=n;j>0;j--)
{
int x=i;
int y=j;
int sum=0;
while(x>0&&y<=n&&A[x][j]==A[i][y])
{
sum++;
x--,y++;
}
dp[i][j]=min(sum,dp[i-1][j+1]+1);
ans=max(ans,dp[i][j]);
}
}
printf("%d\n",ans);
}
return 0;
}