hdu2859 dp

时间:2023-03-09 13:15:44
hdu2859 dp

题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=2859

题意:输入一个数n,接下来是一个由n*n个字母组成的矩阵,求以左下到右上的线为轴的最大对称阵的大小。

思路:就是dp,,,我最大的感悟就是dp要是想明白了,代码贼简单,想不懂就是死难。。思路么,看下面的图就懂了。

hdu2859 dp

代码:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std; int dp[][];
char str[][]; int main()
{
int n;
while(scanf("%d",&n)== && n)
{
for(int i=; i<n; i++)
scanf("%s",str[i]);
memset(dp,,sizeof(dp));
int t1,t2,ans=;;
for(int i=; i<n; i++)
{
for(int j=; j<n; j++)
{
if(i== || j==n-) ///初始化
dp[i][j]=;
t1=i,t2=j;
while(t1>= && t2<n && str[i][t2]==str[t1][j])
{
t1--;
t2++;
}
t1=i-t1;
if(t1>=dp[i-][j+]+) dp[i][j]=dp[i-][j+]+;
else dp[i][j]=t1;
ans=max(ans,dp[i][j]);
}
}
printf("%d\n",ans);
}
return ;
}