标签:
3
搜索每一个位置作为对角线的情况下能够到达的最大值
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int maxn=1005; int dp[maxn][maxn]; char s[maxn][maxn]; int N,ans; void work(int x,int y)//枚举每一个点的上方与右边能够到的最大值 { if(x==0||y==N-1){ dp[x][y]=1; return ; } int i=x,j=y; while(i>=0&&j<N&&s[i][y]==s[x][j]){ i--;j++; } int len=x-i; if(len>=dp[x-1][y+1]+1)dp[x][y]=dp[x-1][y+1]+1; else dp[x][y]=len; ans=max(ans,dp[x][y]); } int main() { while(scanf("%d",&N)&&N){ for(int i=0;i<N;i++){ scanf("%s",s[i]); } ans=1; for(int i=0;i<N;i++) for(int j=0;j<N;j++){ work(i,j); } printf("%d\n",ans); } return 0; }
标签:
原文地址:http://blog.csdn.net/u013167299/article/details/45788735