HDU - 2859 Phalanx

题意:求/直线的对称矩阵最大多大

思路:DP 每个点就是了

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int MAXN = 1200;

int dp[MAXN][MAXN];
char str[MAXN][MAXN];
int n;

int main() {
	while (scanf("%d", &n) != EOF && n) {
		for (int i = 0; i < n; i++)
			scanf("%s", str[i]);
		int ans = 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 cnt1 = i, cnt2 = j;
				while (cnt1 >= 0 && cnt2 < n && str[i][cnt2] == str[cnt1][j]) {
					cnt1--;
					cnt2++;
				}
				int cur = i-cnt1;
				if (cur >= dp[i-1][j+1]+1)
					dp[i][j] = dp[i-1][j+1] + 1;
				else dp[i][j] = cur;
				ans = max(ans, dp[i][j]);
			}
		printf("%d\n", ans);
	}
	return 0;
}

HDU - 2859 Phalanx,布布扣,bubuko.com

时间: 2024-11-05 22:49:52

HDU - 2859 Phalanx的相关文章

[2016-03-29][HDU][2859][Phalanx]

时间:2016-03-29 15:53:01 星期二 题目编号:[2016-03-29][HDU][2859][Phalanx] 分析:dp[i][j]表示以 (i,j)为左下角 #include <cstdio> #include <algorithm> using namespace std; const int maxn = 1000 + 10; char a[maxn][maxn]; int dp[maxn][maxn],ans,n; void func(int x,int

HDU 2859 Phalanx (dp)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2859 给你一个n*n的矩阵,问你最大的对称度是多少(左下右上为对称线) dp[i][j]表示i行j列元素的最大对称度 每到一个元素的时候,往上边和右边扩展看字符最优的对称长度 与dp[i - 1][j - 1]进行比较取最优即可. 1 //#pragma comment(linker, "/STACK:102400000, 102400000") 2 #include <algori

HDU 2859 Phalanx(二维DP)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2859 题目大意:对称矩阵是这样的矩阵,它由“左下到右”线对称. 相应位置的元素应该相同. 例如,这里是3 * 3对称矩阵: cbx cpb zcc 给出任意的n*n的矩阵找出里面最大的对称的子矩阵,输出大小. 解题思路:有这样一个规律,对于每个字符看该列以上和该行右侧的字符匹配量,如果匹配量大于右上角记录下来的矩阵大小,就是右上角的数值+1,否则就是这个匹配量.根据这个规律,把n*n的点都遍历以便一

HDU 2859&mdash;Phalanx(DP)

Time Limit:5000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Description 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 e

hdu(2859)——Phalanx(dp)

题意: 现在有一个n*n的矩阵,然后每个格子中都有一个字母(大写或小写组成).然后询问你现在最大的对称子矩阵的边长是多少.注意这里的对角线是从左下角到右上角上去的. 思路: 这道题我自己写出了dp的定义式,但是要怎么转移方程并没有推出来. 我看了好久的题解才明白的,果然还是太弱... 首先我们定义:dp[i][j]为第i行第j列所能够组成的最大对称子矩阵的长度.关于对角线完全对称的矩阵! 转移方程为:dp[i][j]=dp[i-1][j+1]+1 : 注意这里是由点(i-1,j+1)推过来的.因

HDU - 2859 Phalanx(dp)

题目链接:点我点我 题意:求以左下到右上的最大对称矩阵. 题解:对于每个点(以它为一个矩阵的最左下角),判断一下它右边的第一个点和上面的第一个点,如果相同就再往下判断下去,直到不相同,取当前位置能拿到的值. 如果一直相同,说明这个最左下脚的点能够加入进去成为一员,+1呗. 1 #include <iostream> 2 #include <algorithm> 3 using namespace std; 4 5 const int N=1111; 6 char map[N][N]

Q - Phalanx HDU 2859 ( dp )

Q - Phalanx Time Limit:5000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Status Practice HDU 2859 Description Today is army day, but the servicemen are busy with the phalanx for the celebration of the 60th anniversary of the PRC. A pha

Phalanx (hdu 2859)

http://acm.hdu.edu.cn/showproblem.php?pid=2859 Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 996    Accepted Submission(s): 468 Problem Description Today is army day, but the servicemen are b

动规-HDU-2859

http://acm.hdu.edu.cn/showproblem.php?pid=2859 Phalanx 给定一个n*m的字符矩阵,求最大以副对角线对称的子方阵行数. 解题报告 思路 对于给定字符矩阵M: 记以元素M[i][j]为左下角的最大副对角线对称子方阵行数为dp[i][j]. 假设已经求得dp[i-1][j+1],欲求dp[i][j],则需要以dp[i-1][j+1]为上界,判断从M[i][j]为左下角开始的M[i][k]与M[k][j]有多少个连续相同即可. 那么就可以两层循环遍历