Phalanx HDU - 2859 dp
作者:互联网
#include<cstdio> #include<cstring> #include<algorithm> #include<iostream> using namespace std; const int N=1010; int n; char a[N][N]; //da[i][j]是a[i][j]作为左下角时的最大对称矩阵 int dp[N][N]; int main(){ while(cin>>n&&n) { int ans=1; memset(dp,0,sizeof dp); for(int i=0;i<n;i++) cin>>a[i]; //枚举对角线端点 for(int i=0;i<n;i++){ for(int j=0;j<n;j++) { //第一行和最后一列初始为1,因为无法继续延伸 if(i==0||j==n-1) { dp[i][j]=1; continue; } //对角线的 int t1=i,t2=j; //从(i,j)分别向上向右延伸,直到不相等为止 while(t1>=0&&t2<=n-1&&a[t1][j]==a[i][t2]) { t1--; t2++; } int k=i-t1; // da[i][j]是 a[i][j] 作为 左下角 时的最大对称矩阵 //画图便于理解 //while里面扩展的是最外层 //取min是要顾及里层的 dp[i][j]=min(dp[i-1][j+1]+1,k); ans=max(ans,dp[i][j]); } } cout<<ans<<endl; } return 0; }
标签:2859,HDU,int,&&,Phalanx,左下角,include,dp 来源: https://www.cnblogs.com/QingyuYYYYY/p/12238688.html