自己再做的时候不知道怎么就过了。。。只是我的还是二维的dp而已。。
char mp[mxn][mxn];
int dp[mxn][mxn];
int n;
int check(int x,int y){
int dif=0;
for(int i=1;i<=min(x-1,n-y);++i){
if(x-i<1||y+i>n)break;
dif++;
if(mp[x-i][y]!=mp[x][y+i])return dif-1;
}
return dif;
}
int main(){
// freopen("in.txt","r",stdin);
while(~sf("%d",&n)&&n){
for(int i=1;i<=n;++i){ sf("%s",mp[i]+1); }
for(int i=1;i<=n;++i) for(int j=1;j<=n;++j)dp[i][j]=1;
int ans=0;
for(int i=1;i<=n;++i){
for(int j=1;j<=n;++j){
//pf("%d ",check(i,j));
dp[i][j]=max(dp[i][j],min(dp[i-1][j+1],check(i,j)+1));
ans=max(ans,dp[i][j]);
}//puts("");
}
/*
for(int i=1;i<=n;++i){
for(int j=1;j<=n;++j){
pf("%d ",dp[i][j]);
}puts("");
}
*/
pf("%d\n",ans);
}
}