/*

看题解A的。
总结:小矩阵--> 大矩阵 dp[i][j]=min(t,dp[i-1][j+1]+1); */ #include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <algorithm>
#include <math.h>
#include <queue>
#include <stack>
#include <map>
using namespace std;
#define INF 0x3f3f3f3f
#define pi acos(-1.0)
#define MAX 100010
#define mod 9973
#define LL long long const int N=1e3+10; char a[N][N];
int dp[N][N];
int n; int main()
{
while(~scanf("%d",&n)&&n)
{
for(int i=1;i<=n;i++)
{
scanf("%s",a[i]+1);
for(int j=1;j<=n;j++)
dp[i][j]=0;
}
int ans=1;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(i==1&&j==n)
dp[i][j]=1;
else{
int t1=i,t2=j;
while(t1>=1&&t2<=n&&a[t1][j]==a[i][t2]){
t1--;
t2++;
}
int t=i-t1;
if(t>dp[i-1][j+1]+1) //这一步其实就是,你想一下大矩阵只满足最外面的上和右对称,但是不能保证里面的对称,所以取这样
dp[i][j]=dp[i-1][j+1]+1;
else
dp[i][j]=t; //这里就是大矩阵上和右达不到小矩阵对称长度。
ans=max(ans,dp[i][j]);
}
}
} /*for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++)
printf("%d ",dp[i][j]);
puts("");
}*/ cout<<ans<<endl;
}
return 0;
}

最新文章

  1. Unity3D 脚本手册
  2. 在将 varchar 值 &#39;&#39; 转换成数据类型 int 时失败
  3. linux下启动AP热点时出错
  4. html5 audio音频播放全解析
  5. onClick,onServerClick,onClientClick
  6. mha 自动failover 原创
  7. 【转】 NSString / NSMutableString 字符串处理,常用代码 (实例)
  8. poj3233之经典矩阵乘法
  9. SQL修炼道路上必看的书籍
  10. [C++]C++中的运行时类型检测
  11. TP-LINK 路由器怎么设置
  12. Eclipse下载GitHub源码
  13. git 初探
  14. ASP.NET MVC中注册Global.asax的Application_Error事件处理全局异常
  15. 【bzoj4817】[Sdoi2017]树点涂色&amp;&amp;bzoj3779-重组病毒
  16. 使用PsExec获取shell执行命令
  17. python -u 启动python文件的作用,PYTHONUNBUFFERED环境变量的作用
  18. [javaSE] 网络编程(TCP-并发上传图片)
  19. 【SSH网上商城项目实战29】使用JsChart技术在后台显示商品销售报表
  20. LeetCode 628. 三个数的最大乘积

热门文章

  1. 一致性hash算法在memcached中的使用
  2. google protocol buffer的原理和使用(一)
  3. IO管理与磁盘调度
  4. 回溯法——求解N皇后问题
  5. java里类方法和实例方法
  6. (linux)自旋锁及其衍生锁
  7. IDEA中使用git详细步骤
  8. CentOS/Ubuntu安装GLIBCXX3.4.21
  9. oracle 转移表空间
  10. Intel&#174; Media SDK Media Samples Linux 学习笔记(转)