hdoj2859【DP基础】
来源:互联网 发布:淘宝上好的零食店铺 编辑:程序博客网 时间:2024/05/23 12:45
/*看题解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 longconst 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;}
0 0
- hdoj2859【DP基础】
- dp基础
- 基础DP
- 基础DP
- DP基础
- 基础DP
- 基础DP
- 基础DP
- 基础dp
- 基础dp
- DP·基础DP
- [DP]0817-08基础DP
- POJ1949 DP基础题
- 数位dp基础题目
- HDU 1176 基础DP
- HDU 2084 基础DP
- 【线性DP】基础练习
- 基础dp总结
- EasySTL,实现自己的STL
- 时间转换大全
- 2.node.js 入门
- Eclipse快捷大全(转载)
- 分析能力提高篇五:13年最美青春!3冠+FMVP! 从此再无热火队魂
- hdoj2859【DP基础】
- linux常用命令
- Reverse Nodes in k-Group
- 【九度OJ】:1049 去掉字符串问题
- Android自定义view时注意
- 3. node.js 异步式I/O或非阻塞式I/O
- Linux Make 命令详解
- js实现图片切换(经典代码集锦)
- HDU——2955Robberies(小数背包)