hdu 2859

来源:互联网 发布:匡恩网络 经常加班 编辑:程序博客网 时间:2024/04/29 21:24
#include<stdio.h>#include<string.h>char a[2000][2000];int b[2000][2000];int main(){int n,i,j,k,max,m;while(scanf("%d",&n),n!=0){for(i=1;i<=n;i++)scanf("%s",a[i]+1);memset(b,0,sizeof(b));for(i=1;i<=n;i++)for(j=1;j<=n;j++)b[i][j]=1;max=-1;for(i=1;i<=n;i++){for(j=1;j<=n;j++){m=b[i-1][j+1];for(k=1;k<=m;k++)   if(a[i-k][j]!=a[i][j+k])   break;   if(k>m)   b[i][j]=m+1;   else    b[i][j]=k;   if(b[i][j]>max)   max=b[i][j];}}printf("%d\n",max);}return 0;}题意:这道题是让你找到一个关于矩阵从左下到右上的对角线对称的最大层数;比如:abxcybzca找到的是红色字母的层数;刚开始我是一个一个找的,很明显会超时,简单处理一下就可以,我们要求a[i][j]的最大层数,那么加上的层数就是它右上对角线的值,即m=b[i-1][j+1];

0 0