HDU 2859 Phalanx(二维DP)
2024-08-28 21:14:04
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2859
题目大意:对称矩阵是这样的矩阵,它由“左下到右”线对称。 相应位置的元素应该相同。 例如,这里是3 * 3对称矩阵:
cbx
cpb
zcc
给出任意的n*n的矩阵找出里面最大的对称的子矩阵,输出大小。
解题思路:有这样一个规律,对于每个字符看该列以上和该行右侧的字符匹配量,如果匹配量大于右上角记录下来的矩阵大小,就是右上角的数值+1,否则就是这个匹配量。根据这个规律,把n*n的点都遍历以便一,直推下去找出最大值就可以了。
代码:
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=1e3+;
char map[N][N];
int dp[N][N]; int main(){
int n;
while(scanf("%d",&n)&&n){
memset(dp,,sizeof(dp));
for(int i=;i<=n;i++){
getchar();
for(int j=;j<=n;j++){
scanf("%c",&map[i][j]);
}
}
int ans=;
for(int i=;i<=n;i++){
for(int j=;j<=n;j++){
if(i==||j==n){
dp[i][j]=;
continue;
}
int t1=i,t2=j,cnt=;
while(t1>=&&t2<=n&&map[t1][j]==map[i][t2]){
t1--;
t2++;
cnt++;
}
if(cnt>=dp[i-][j+]+)
dp[i][j]=dp[i-][j+]+;
else
dp[i][j]=cnt;
ans=max(ans,dp[i][j]);
}
}
printf("%d\n",ans);
}
}
最新文章
- 向Java技术进军
- Android中如何查看内存
- Network Instructions in Linux
- Oracle存储过程中临时表的使用技巧
- JS引用另外JS文件的顺序问题。
- Queue、进程、线程、协程
- js和jquery获取子元素
- 快速用springmvc搭建web应用-超越昨天的自己系列(10)
- UML九种图汇总
- 如何配置adb环境变量
- ios屏幕怎么投屏到电脑显示器
- 数据库03_SQL语句
- NDK环境搭建方法1
- JavaScript监听手机物理返回键的两种解决方法
- 《DSP using MATLAB》Problem 3.3
- 关于StringBuffe()长度和初始化长度的问题归纳
- PHP连接mysql8.0出错“SQLSTATE[HY000] [2054] The server requested authentication method unknow.....
- Windows 64位下安装Redis教程
- Android APP架构设计——MVP的使用示例
- 学会了vim中的自动补全功能