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)推过来的。由于我们在这里矩阵的对角线是由左下角推到右上角去的。
首先我们要进行初始化,第0行的它们所能组成的dp[0][i]=1,最大仅仅能组成1个。
然后我们对每一个点进行推断(i,j),当然它是从(i-1,j+1)推过来的。可是对于每一个字符看该列以上和该行右側的字符匹配量,假设该匹配量大于右上角记录下来的矩阵大小。那么就是右上角的数值加1。否则就是这个匹配量(由于我们我们每次都要满足全部的。所以要尽可能的取小的)
#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
#define maxn 1111
int dp[maxn][maxn];
char a[maxn][maxn];
int main(){
int n;
while(~scanf("%d",&n)){
if(n==0) break;
int ans=1;
for(int i=0;i<n;i++) scanf("%s",a[i]);
for(int i=0;i<n;i++) dp[0][i]=1;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(i==0) continue;
int tx=i,ty=j;
while(tx>=0&&ty<n&&a[tx][j]==a[i][ty]){
tx--; ty++;
}
int cur=i-tx;
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);
}
}
*(这道题真心卡了不少时间。希望可以好好思考,举一反三啊!)
hdu(2859)——Phalanx(dp)的更多相关文章
- HDU 2859 Phalanx (DP)
Phalanx Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Su ...
- HDU 2859—Phalanx(DP)
Time Limit:5000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Description Today i ...
- HDU 2859 Phalanx ——(DP)
感觉是个n^3的dp,只是可能上界比较松吧..转移见代码.值得注意的一个地方是如果n是1,那么在for里面是不会更新答案的,因此ans要初始化为1. 代码如下: #include <stdio. ...
- HDU 2859 Phalanx(对称矩阵 经典dp样例)
传送门: http://acm.hdu.edu.cn/showproblem.php?pid=2859 Phalanx Time Limit: 10000/5000 MS (Java/Others) ...
- HDU 4433 locker(DP)(2012 Asia Tianjin Regional Contest)
Problem Description A password locker with N digits, each digit can be rotated to 0-9 circularly.You ...
- HDU 3008 Warcraft(DP)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3008 题目大意:人有100血和100魔法,每秒增加 t 魔法(不能超过100).n个技能,每个技能消耗 ...
- hdu 2059 龟兔赛跑(dp)
龟兔赛跑 Problem Description 据说在很久很久以前,可怜的兔子经历了人生中最大的打击——赛跑输给乌龟后,心中郁闷,发誓要报仇雪恨,于是躲进了杭州下沙某农业园卧薪尝胆潜心修炼,终于练成 ...
- HDU 4832 Chess (DP)
Chess Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
- HDU 4945 2048(dp)
题意:给n(n<=100,000)个数,0<=a[i]<=2048 .一个好的集合要满足,集合内的数可以根据2048的合并规则合并成2048 .输出好的集合的个数%998244353 ...
随机推荐
- BZOJ1468: Tree & BZOJ3365: [Usaco2004 Feb]Distance Statistics 路程统计
[传送门:BZOJ1468&BZOJ3365] 简要题意: 给出一棵n个点的树,和每条边的边权,求出有多少个点对的距离<=k 题解: 点分治模板题 点分治的主要步骤: 1.首先选取一个点 ...
- zzulioj--1804--ZY学长的密码(字符串)
1804: ZY学长的密码 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 140 Solved: 53 SubmitStatusWeb Board ...
- Java 类和对象12
构造一辆汽车,油箱容量100L,当前里程数0,当前油量0,可以根据道路状况确定油耗,根据行驶速度与行驶时间, 输出当前油量与总里程数. public class Car_1 { // 车牌 priva ...
- GPU学习笔记(二)
找到了一个还不错的教程http://blog.csdn.net/augusdi/article/details/12527497 今天课比较多,但是有了这个教程解决了昨天不能运行的问题.
- PostgreSQL环境中查看SQL执行计划示例
explain analyze ,format,buffers, format :TEXT, XML, JSON, or YAML. EXPLAIN (ANALYZE,buffers,format ...
- ES6中的let、contst
一 let 1.let 局部变量 不会变量提升,在运用时候要先声明在调用,var 全局变量 会产生变量提升: 2.在块级作用域中纯在let const,他所生命的变量就绑定在这个区域,未经过声明调用会 ...
- mac终端(terminal)里的快捷键
Command + K 清屏 Command + T 新建标签 Command +W 关闭当前标签页 Command + S 保存终端输出 Command + D 垂直分隔当前标签页 Command ...
- 设置cookie的方法
设置cookie的方法 1.登录之后后端返回的cookie放在响应的数据里,我们可以取到值, 这样就设置上了一个cookie,然后由于我们需要在三个环境里进行操作,开发环境.测试环境.生产环境.刚刚上 ...
- time---统计命令所花费的总时间
time命令用于统计给定命令所花费的总时间. 语法 time(参数) 参数 指令:指定需要运行的额指令及其参数. 实例 当测试一个程序或比较不同算法时,执行时间是非常重要的,一个好的算法应该是用时最短 ...
- COGS——T1310. [HAOI2006]聪明的猴子
http://cogs.pro/cogs/problem/problem.php?pid=1310 ★ 输入文件:monkey.in 输出文件:monkey.out 简单对比时间限制:1 ...