传送门:

http://acm.hdu.edu.cn/showproblem.php?pid=2859

Phalanx

Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 2792    Accepted Submission(s): 1357

Problem 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 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 (0<n<=1000), followed by n lines which has n character. There won’t be any blank spaces between characters or the end of line. The input file is ended with a 0.
 
Output
Each test case output one line, the size of the maximum symmetrical sub- matrix.
 
Sample Input
3
abx
cyb
zca
4
zaba
cbab
abbc
cacq
0
 
Sample Output
3
3
 
Source
 
题目意思:
给你一个字符矩阵,比如n*n的矩阵,问你最大的对称矩阵的阶数是多少
阶数:比如3*3的矩阵,阶数就是3
对称矩阵的定义:副对角线两边的字符对称,副对角线:从左下到右上
 
分析:
我们从大矩阵的右上角看,每次矩阵阶数加一,都是原来矩阵的下面加一行,左边加一列
给一个2阶的对称矩阵,它对称的字符肯定只有一对
给你一个三阶的对称矩阵,它的最下面的行和最左边的列,对称字符的个数肯定是两对
同理,给一个四阶的对称矩阵,它的最下面的行和最左边的列,对称字符的个数肯定是三对
所以如果该矩阵是对称矩阵的话,随着它阶数的加1,它最下面的行和最左的列的对称字符数也加一
这是后面能dp的原因
 
dp【i】【j】:以i,j为矩阵的左下角,最大对称矩阵的阶数
 
如果当前矩阵i,j的最下一行和最左一列的字符数大于矩阵i-1,j+1的最下一行和最左一列的字符数的话,那么当前矩阵就有可能的对称矩阵(有可能)
所以: dp[i][j]=dp[i-1][j+1]+1;
 
记住:我们是从右上角开始推的,往左下角移动
code:
#include<bits/stdc++.h>
using namespace std;
#define max_v 1005
char a[max_v][max_v];
int dp[max_v][max_v];
int main()
{
int n;
while(cin>>n,n)
{
memset(dp,,sizeof(dp));
getchar();
for(int i=;i<n;i++)
{
scanf("%s",&a[i]);
dp[][i]=;//初始化
}
int ans=;
for(int i=;i<n;i++)
{
for(int j=n-;j>=;j--)//右上角开始
{
int x=i-,y=j+;//上一个矩阵的左下角坐标
int num=;//对称字符个数
while(x>=&&x<n&&y>=&&y<n&&a[i][y]==a[x][j])//坐标在大矩阵内且字符对称
{
x--;//横坐标上移
y++;//纵坐标右移
num++;//对称字符数加1
}
if(num>dp[i-][j+])//判断当前矩阵是不是对称矩阵
{
dp[i][j]=dp[i-][j+]+;
}else
{
dp[i][j]=num;
}
ans=max(ans,dp[i][j]);//找对称矩阵最大阶
}
}
printf("%d\n",ans);
}
return ;
}

HDU 2859 Phalanx(对称矩阵 经典dp样例)的更多相关文章

  1. HDU 2859 Phalanx(二维DP)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2859 题目大意:对称矩阵是这样的矩阵,它由“左下到右”线对称. 相应位置的元素应该相同. 例如,这里是 ...

  2. HDU 1003 Max Sum --- 经典DP

    HDU 1003    相关链接   HDU 1231题解 题目大意:给定序列个数n及n个数,求该序列的最大连续子序列的和,要求输出最大连续子序列的和以及子序列的首位位置 解题思路:经典DP,可以定义 ...

  3. HDU 2859 Phalanx (dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2859 给你一个n*n的矩阵,问你最大的对称度是多少(左下右上为对称线) dp[i][j]表示i行j列元 ...

  4. HDU 2859—Phalanx(DP)

    Time Limit:5000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Description Today i ...

  5. HDU 2859 Phalanx (DP)

    Phalanx Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Su ...

  6. hdu(2859)——Phalanx(dp)

    题意: 如今有一个n*n的矩阵,然后每一个格子中都有一个字母(大写或小写组成).然后询问你如今最大的对称子矩阵的边长是多少.注意这里的对角线是从左下角到右上角上去的. 思路: 这道题我自己写出了dp的 ...

  7. HDU 2859 Phalanx ——(DP)

    感觉是个n^3的dp,只是可能上界比较松吧..转移见代码.值得注意的一个地方是如果n是1,那么在for里面是不会更新答案的,因此ans要初始化为1. 代码如下: #include <stdio. ...

  8. hdu 2859 Phalanx (最大对称子矩阵)

    Problem Description Today is army day, but the servicemen are busy with the phalanx for the celebrat ...

  9. hdu 2859 (二维dp)

    点击打开链接 题意: 给你一个n*n的矩阵,矩阵中只含有26个小写字母,求其中最大的对称矩阵的大小 当我们算到s[i][j]时,每次我们只需要将它上方的和右方的依次比较,看是否相同 注意这里不能只比较 ...

随机推荐

  1. 开源TSDB简介--Druid

    开源TSDB简介--Druid Druid是一个以Java编写的开源分布式列式数据存储. Druid的目标是快速提取大量事件数据,并提供低延迟的查询. 德鲁伊的名字来源于许多角色扮演游戏中的变形德鲁伊 ...

  2. 上下文(Context)和作用域(Scope)

    函数的每次调用都有与之紧密相关的作用域和上下文.从根本上来说,作用域是基于函数的,而上下文是基于对象的. 换句话说,作用域涉及到所被调用函数中的变量访问,并且不同的调用场景是不一样的.上下文始终是th ...

  3. maven module

    通过将一个maven项目拆分成多个module,会引入一定的项目复杂度,但随着后期项目代码的逐渐增多,最直观的感受是,每次build代码,不必build整个项目,可节省很多时间. 如果各个module ...

  4. 分支结构if……else

    语法: if(条件) 语句或语句块1 end else begin 语句或者语句块2 end 特点: . else并不一定是必须的. . 如否条件为真,将执行语句和语句块1,条件为假时执行语句或语句块 ...

  5. IOS微信浏览器点击事件不起作用问题

    问题: $(document).on("click",".btn",function(){alert("1")}); 在微信浏览器上点击不起 ...

  6. es6新语法的使用

    1.声明变量: let 声明变量 作用域代码块作用域{} 尽在模块 先使用后声明 会报错 { let a= 12; alert(a) } let 不允许重复声明同一个变量 const 声明是一个常量, ...

  7. Java开发坏境配置

    在"系统变量"中设置3项属性,JAVA_HOME,PATH,CLASSPATH(大小写无所谓),若已存在则点击"编辑",不存在则点击"新建" ...

  8. Java & COM

  9. SENNA

    SENNA is a software distributed under a non-commercial license, which outputs a host of Natural Lang ...

  10. WebSettings 最全属性说明

    setAllowContentAccess (boolean allow) 是否允许在WebView中访问内容URL(Content Url),默认允许.内容Url访问允许WebView从安装在系统中 ...