HDU2859 Phalanx DP
2015-12-02 22:12
246 查看
Phalanx
Time Limit:5000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64uDescription
Today is army day, but the servicemen are busy with the phalanx for the celebration of the 60th anniversary of the PRC.A phalanx is a matrix of size n*n, each element is a character (a~z or A~Z), standing for the military branch of the servicemen on that position.
For some special requirement it has to find out the size of the max symmetrical sub-array. And with no doubt, the Central Military Committee gave this task to ALPCs.
A symmetrical matrix is such a matrix that it is symmetrical by the “left-down to right-up” line. The element on the corresponding place should be the same. For example, here is a 3*3 symmetrical matrix:
cbx
cpb
zcc
Input
There are several test cases in the input file. Each case starts with an integer n (0Output
Each test case output one line, the size of the maximum symmetrical sub- matrix.Sample Input
3abx
cyb
zca
4
zaba
cbab
abbc
cacq
0
Sample Output
33
题解
一开始想了很久没想出来…脑子还是不够灵活,搜了很多题解才慢慢明白做法。对每个点对它上面和右边的点进行匹配,如果匹配量大于右上角记录的矩阵最大的值,那么这个值就+1,否则就等于匹配量
代码
#include<iostream> #include<cmath> #include<cstring> #include<cstdio> #include<algorithm> using namespace std; char mar[1001][1001]; int dp[1001][1001]; int main() { int n; while (scanf("%d",&n)&& n) { for (int i = 0;i<n;i++) scanf("%s",&mar[i] ); int maxn = 1; for (int i = 0;i<n;i++) { for (int j = 0;j<n;j++) { if (i == 0 || j == n-1) { dp[i][j] = 1; continue; } int t1 = i;int t2 = j; while (t1>=0 && t2<n && mar[t1][j] == mar[i][t2]) { t1--; t2++; } int a = i-t1; if (a >= dp[i-1][j+1]+1) dp[i][j] = dp[i-1][j+1]+1; else dp[i][j] = a; if (dp[i][j] > maxn) maxn = dp[i][j]; } } printf("%d\n",maxn); memset(dp,0,sizeof(dp)); memset(mar,0,sizeof(mar)); } }
相关文章推荐
- C++类的析构函数不能抛出异常
- 地址解析协议(APR)
- 一个蒙文系统设计与实现
- Dinic 算法
- 替换字段中第一个相同字符的方法
- 在C++中,关键字explicit的作用
- 使用js获取QueryString的方法小结
- Thinkphp 学习笔记
- border属性黑科技(已被玩坏)
- 02 第一份实习工作之后的三个月
- python写一个日志查询工具(登录ftp服务器得到日志并分析)
- 设计模式之适配器模式
- Android在一个程序中启动另一个程序(包名、类名)
- 输入三个整数,从小到大的顺序输出(利用指针)
- windows驱动开发相关知识
- myeclipse中的web项目详解
- Java 日期类的使用:Date,Calender,SimpleDateFormat的简单使用
- 算法 -- 求两个等长数组的中位数
- [LeetCode]Path Sum
- Git 秘钥管理(服务器和客户端)