PAT A1045 动态规划
该题目有两种解法,都是动态规划中特别经典的解法,一种是最长不下降子序列,一种是最长公共子序列;
第一种方法对于该题目其实有点取巧的感觉;
首先,注意一点,对于最长不下降子序列来说,其序列的元素一定是非递减的,所以我们的当务之急是如何将值转换为
递增序列,从而使得算法能够继续进行;
对于这个问题,我们可以使用hashtable进行处理,也就是利用hashtable重新使得值递增;
这里需要注意一下,子序列递增研究的是不连续的子序列,连续的子序列其实可以用前面的KMP算法来及进行解决;
对于该问题,首当其中的还是状态转移方程。由于该问题还是从0开始研究,所以仍然设置一个一维数组dp来储存中间的状态;
大致思路是限定一个子串序列,然后选择一个,从第一个开始进行轮询,这里有点像插入排序的感觉;
其状态转移方程为dp[i]=max(1,dp[j]+1);
该方程可以理解将第i个元素排在j后面,从而继承j之前的子串序列的长度,1为单个元素的序列长度;
代码如下:
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<algorithm>
using namespace std;
const int maxc=210;
const int maxn=10010;
int Hashtable[maxc];
int a[maxn],dp[maxn];
int main(){int n,m,x;scanf("%d%d",&n,&m);memset(Hashtable,-1,sizeof(Hashtable));for(int i=0;i<m;i++){scanf("%d",&x);Hashtablet[x]=i;}int L,num=0;scanf("%d",&L);for(int i=0;i<L;i++){scanf("%d",&x);if(Hashtable[x]>=0){a[num++]=Hashtable[x];//进行hashtable的相应转换}}int ans=-1;for(int i=0;i<num;i++){dp[i]=1;for(int j=0;j<i;j++){if(a[j]<=a[i]&&dp[i]<dp[j]+1){dp[i]=dp[j]+1;}}ans=max(ans,dp[i]);}printf("%d\n",ans);return 0;
}
第二种不太好理解,所以这里先不再赘述,主要是不能理解为什么公共部分可以重复输出;
PAT A1045 动态规划相关推荐
- PAT A1030 动态规划
这道题是动态规划几大问题的其中一种,为最长回文子串问题: 动态规划个人来说,觉得最重要的就是建立状态转移方程.对于方程变量,我认为最重要的是有几个构成的关键变量: 对于这道题,我们着手于i~j个字符, ...
- PAT甲级考纲(最少的时间换尽可能多的分数)
下面的考纲从最重要的.考试概率最大的开始讲起,用最少的时间得最多的分数.祝大家考一个好成绩! 图论算法★★★★★ 图论算法几乎每年都有,99%会考,剩下1%是出卷老师啊想晃你一下. 搜索算法DFS/B ...
- 算法唯手熟尔(PAT剩余清单 or leetcode)---希望可以日更
文章目录 2020/3/5 PAT A1119_C 2020/3/6 PAT A1123_C PAT A1115_C PAT A1114_C leetcode 206. 反转链表_C leetcode ...
- PAT甲级题目翻译+答案 AcWing(动态规划)
1007 Maximum Subsequence Sum (25 分) 题意 :注意最后输出的不是索引而是在那个索引的数 思路 :f为当前的假设开始指针,每一次累加到sum,如果sum大于res,就更 ...
- PAT (Advanced Level) 1003 Emergency(最短路+动态规划)
题目链接:点击查看 题目大意:给出一个无向图,再给出起点和终点,要求消防队员从起点出发,尽可能快的赶往终点,每个点都有一个权值w,代表该点有多少个人口,问消防队员在尽可能快的赶到终点的前提下,一共有多 ...
- L3-001. 凑零钱-PAT团体程序设计天梯赛GPLT(01背包,动态规划)
韩梅梅喜欢满宇宙到处逛街.现在她逛到了一家火星店里,发现这家店有个特别的规矩:你可以用任何星球的硬币付钱,但是绝不找零,当然也不能欠债.韩梅梅手边有104枚来自各个星球的硬币,需要请你帮她盘算一下,是 ...
- 1007. Maximum Subsequence Sum (25)-PAT甲级真题(最大连续子序列和、动态规划dp)
Given a sequence of K integers { N1, N2, -, NK }. A continuous subsequence is defined to be { Ni, Ni ...
- PAT -A-1007 Maximum Subsequence Sum 简单动态规划
Given a sequence of K integers { N1, N2, ..., NK }. A continuous subsequence is defined to ...
- 【PAT甲级】A1001-A1050刷题记录
文章目录 A1001 A+B Format (20 分) 0.25 ★(一元多项式加法) A1002 A+B for Polynomials (25 分) 0.21 (单源最短路Dijkstra+边权 ...
最新文章
- linux0.11内核编译,编译Linux-0.11内核
- 从AlexNet到BERT:深度学习中那些最重要idea的最简单回顾
- ★ 让你的虚机飞起来 ★
- 20165235 Java第一周学习总结
- 在Eclipse中高效运行HTTP / REST集成测试
- linux php mysqldump,Linux Shell脚本之利用mysqldump备份MySQL数据库(详细注解)
- php 度分秒和小数转化
- python自动输入饥荒控制台代码
- Hack the box: Bastion
- 216 Web 安全色 开发中常用安全色
- 锐捷路由器如何配置虚拟服务器,[路由器自动配置方法技巧] 锐捷路由器配置方法...
- ubuntu 18.04下greenplum安装笔记(二)安装Greenplum的失败的尝试
- Zookeeper、Curator
- Excel集成股票分析工具案例
- SLAM在机器人中的应用
- excel怎么设置颜色的值记录
- 禁用微软杀毒和移除以Paint 3D打开的相关注册表:
- [ROC-RK3566-PC] 如何编译Linux_SDK并打包Ubuntu系统固件?
- linux crash工具用法,使用crash工具看懂slab
- 嵌入式Linux——WIFI网卡
热门文章
- 2019小程序没必要做了_企业发展小程序的必要原因
- MySql视图view的使用:创建、修改、删除
- 谷歌大脑AI飞速解锁雅达利,训练不用两小时:预测能力“前所未有”
- 当,程序员突然想画画,AI+机器人就该登场了
- 一样的打游戏,不一样的酷
- Lintcode: Implement Queue by Stacks 解题报告
- Flutter:手拉手带你极速构建漂亮的跨平台(iOS/Android)移动应用 ✿ 初识
- PHP一阶段 html+css+js 练习题汇总
- ssh免密码远程执行sudo命令
- TensorFlow教程之API DOC 6.1.1Class tensorflow::Env