hdu2859 Phalanx(线性dp)
题目
n*n(n<=1e3)的全小写字母矩阵,求图中的最大对称子矩阵的边长
其中对称子矩阵的对角线是从右上角到左下角
bca
ebd
ghi
如上例,以ce为轴,应当输出2
题解
kuangbin的基础dp,软磨硬泡总算刷完了
枚举每个点,把每个点当左下角来看,dp[i][j]从其右上的dp[i-1][j+1]来转移,
转移时,暴力判断本列上分和本行右边能不能扩展,
如果能扩展到对应位置,就是右上的子矩阵规模+1
O(n^3)没敢莽,但赛后暴力了一下n=1e3的全a矩阵,计算量约在3e8,5s足矣
代码
#include<iostream>
#include<cstdio>
#include<vector>
#include<cstring>
using namespace std;
const int N=1e3+10;
char s[N][N];
int n,dp[N][N];
//复杂度在最坏情况下O(n^3)
//1e3个全a字母 计算量约在3e8 单组样例可以接受
//计算次数最坏情况下约为(2*n-1)*1+(2*(n-1)-1)*2+...+(2*1-1)*n
//敢写敢过 榜上一片过时 先冲一发朴素想法
int main()
{while(~scanf("%d",&n)&&n){for(int i=0;i<n;++i)scanf("%s",s[i]);int ans=1;//从右上角起 向左dp 向下dp for(int i=0;i<n;++i){for(int j=n-1;j>=0;--j){dp[i][j]=1;if(i==0||j==n-1)continue;int mx=dp[i-1][j+1];//暴力比较[i][j] 该列内该位置以上 和 该行内该位置以右 for(int k=1;k<=mx;++k){if(s[i-k][j]==s[i][j+k])dp[i][j]++;else break;} ans=max(ans,dp[i][j]);} }printf("%d\n",ans);}return 0;
}
hdu2859 Phalanx(线性dp)相关推荐
- 0x51.动态规划 - 线性DP(习题详解 × 10)
目录 0x51.动态规划 - 线性DP 0x51.1 LIS问题 Problem A. 登山 (最长下降子序列) Problem B. 友好城市(思维) Problem C. 最大上升子序列和 0x5 ...
- UVA11584 划分成回文串 Partitioning by Palindromes(线性DP划分+DP判断回文串)
整理的算法模板合集: ACM模板 依旧是线性DP 我们使用闫氏DP分析法 总体DP转移的时间复杂度为O(n2)O(n^2)O(n2). 但是这里牵扯到判断 i\tt ii 到 j\tt jj 是否为回 ...
- 洛谷P2401 不等数列(线性DP)
本题使用的是线性DP.就是DP数组难以思考,这里我直接给出 dp[i][j]:表示 1 ~ i 这 i 个数 , 其中j 个 " < " 有几种方法 假设我们已经把 n - ...
- CodeForces - 1096D Easy Problem(线性dp)
题目链接:点击查看 题目大意:给出一个字符串,每个字符都有一个权值,现在需要删除权值和最少的字符,满足字符串中不再含有子序列"hard" 题目分析:线性dp,但我不会,看着题解写的 ...
- CodeForces - 456C Boredom(线性dp)
题目链接:点击查看 题目大意:给出一个由n个数字组成的数列,现在给出规则是,每次选择数列中的一种数字 x,选择后的贡献为 x,不过操作后会删除掉所有数值为 x + 1 和 x - 1 的数,现在问如何 ...
- POJ - 1050 To the Max(最大连续子段和,线性dp)
题目链接:点击查看 题目大意:给出一个n*n的矩阵,每个点都有一个权值,现在要从中选取一个子矩阵要求权值和最大,问这个最大权值和是多少 题目分析:因为是要求子矩阵的权值和最大的问题,我们可以直接维护一 ...
- 牛客 - 「火」皇家烈焰(线性dp)
题目链接:点击查看 题目大意:给出一个字符串表示扫雷游戏,其中: 0:这个格子没有烈焰,且其左右两个格子均没有烈焰 1:这个格子没有烈焰,且其左右两个格子中只有一个烈焰 2:这个格子没有烈焰,且其左右 ...
- CH 5102 Mobile Service(线性DP)
CH 5102 Mobile Service \(solution:\) 这道题很容易想到DP,因为题目里已经说了要按顺序完成这些请求.所以我们可以线性DP,但是这一题的状态不是很好设,因为数据范围有 ...
- 动态规划 —— 线性 DP
[概述] 线性动态规划,是较常见的一类动态规划问题,其是在线性结构上进行状态转移,这类问题不像背包问题.区间DP等有固定的模板. 线性动态规划的目标函数为特定变量的线性函数,约束是这些变量的线性不等式 ...
最新文章
- 某33岁国企程序员求助:目前税后60+,工作975,拿到蚂蚁p7offer,3.8k,6200期权,有必要去镀金吗?...
- openstack-neutron基本的网络类型
- 【leetcode】931. Minimum Falling Path Sum
- 2022-03-07 学习docker开发vue前端
- [转载] html转word table样式_[Python02] Python-docx包的使用,快速处理 Word 文件!
- python随机数据库_关于Python的随机数模块,你必须要掌握!-后台/架构/数据库-敏捷大拇指-一个敢保留真话的IT精英社区...
- 进不去系统,解决办法
- Pyqt之QApplication
- java sql编写教务系统_教务管理系统的设计与实现(SQLServer)
- quartus dcfifo操作
- 自律的力量 No Excuse: the power of self-discipline
- 几个常见的 Socket 连接错误及原因[转]
- matlab绘制蔓叶线,powerdraw
- 面向过程、面向对象 的模型和方法
- AUTOCAD——连续标注
- 彻底卸载MariaDB
- 你不知道的腾讯、百度、网易、华为笔试、面试的经过
- matlab声场仿真实例,丹麦理工大学MATLAB编写的超声声场仿真软件
- 转换idx+sub字幕到srt字幕的一个小技巧
- git 创建一个新的空的branch