/*
基础dp
Q - Phalanx
题意:问矩阵最大对称矩阵(按左下角到右上角对称)的对角线长度
题解:
设mp[i][j] 代表处于(i,j)的上面与右边字符对称的最长长度
dp[i][j] 代表走到(i,j)的最大对称矩阵的对角线长度
if(mp[i][j] > dp[i-1][j+1])
dp[i][j] = dp[i-1][j+1]+1;
else
dp[i][j] = mp[i][j];
因为dp的递归方程只与i-1有关,可以化成一维数组
*/
#include<cstdio>
#include<cstring>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<queue>
#include<stack>
#include<map>
using namespace std;
const int N = 1010;
int n;
char s[N][N];
int dp[N];
bool pan(int x,int y)
{
if(x >= 0 && x < n && y >= 0 && y < n)
return true;
return false;
}
int main()
{
while(~scanf("%d",&n) && n)
{
memset(dp,0,sizeof(dp));
for(int i = 0; i < n; i++)
scanf("%s",s[i]);
int ans = 0;
for(int i = 0; i < n; i++)
{
for(int j = 0; j < n; j++)
{
int x = i-1, y = j+1;
int k = 1;
while(x>=0 && x<n && y>=0 && y<n && s[x][j] == s[i][y])
{
k++;
x--;
y++;
}
if(k > dp[j+1])
dp[j] = dp[j+1]+1;
else
dp[j] = k;
ans = max(ans,dp[j]);
}
}
printf("%d\n",ans);
}
return 0;
}
【dp】HDU 2859 Phalanx
最新推荐文章于 2019-07-23 23:47:54 发布