该题目有两种解法,都是动态规划中特别经典的解法,一种是最长不下降子序列,一种是最长公共子序列;

第一种方法对于该题目其实有点取巧的感觉;
首先,注意一点,对于最长不下降子序列来说,其序列的元素一定是非递减的,所以我们的当务之急是如何将值转换为
递增序列,从而使得算法能够继续进行;
对于这个问题,我们可以使用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 动态规划相关推荐

  1. PAT A1030 动态规划

    这道题是动态规划几大问题的其中一种,为最长回文子串问题: 动态规划个人来说,觉得最重要的就是建立状态转移方程.对于方程变量,我认为最重要的是有几个构成的关键变量: 对于这道题,我们着手于i~j个字符, ...

  2. PAT甲级考纲(最少的时间换尽可能多的分数)

    下面的考纲从最重要的.考试概率最大的开始讲起,用最少的时间得最多的分数.祝大家考一个好成绩! 图论算法★★★★★ 图论算法几乎每年都有,99%会考,剩下1%是出卷老师啊想晃你一下. 搜索算法DFS/B ...

  3. 算法唯手熟尔(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 ...

  4. PAT甲级题目翻译+答案 AcWing(动态规划)

    1007 Maximum Subsequence Sum (25 分) 题意 :注意最后输出的不是索引而是在那个索引的数 思路 :f为当前的假设开始指针,每一次累加到sum,如果sum大于res,就更 ...

  5. PAT (Advanced Level) 1003 Emergency(最短路+动态规划)

    题目链接:点击查看 题目大意:给出一个无向图,再给出起点和终点,要求消防队员从起点出发,尽可能快的赶往终点,每个点都有一个权值w,代表该点有多少个人口,问消防队员在尽可能快的赶到终点的前提下,一共有多 ...

  6. L3-001. 凑零钱-PAT团体程序设计天梯赛GPLT(01背包,动态规划)

    韩梅梅喜欢满宇宙到处逛街.现在她逛到了一家火星店里,发现这家店有个特别的规矩:你可以用任何星球的硬币付钱,但是绝不找零,当然也不能欠债.韩梅梅手边有104枚来自各个星球的硬币,需要请你帮她盘算一下,是 ...

  7. 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 ...

  8. PAT -A-1007 Maximum Subsequence Sum 简单动态规划

    Given a sequence of K integers { N​1​​, N​2​​, ..., N​K​​ }. A continuous subsequence is defined to ...

  9. 【PAT甲级】A1001-A1050刷题记录

    文章目录 A1001 A+B Format (20 分) 0.25 ★(一元多项式加法) A1002 A+B for Polynomials (25 分) 0.21 (单源最短路Dijkstra+边权 ...

最新文章

  1. linux0.11内核编译,编译Linux-0.11内核
  2. 从AlexNet到BERT:深度学习中那些最重要idea的最简单回顾
  3. ★ 让你的虚机飞起来 ★
  4. 20165235 Java第一周学习总结
  5. 在Eclipse中高效运行HTTP / REST集成测试
  6. linux php mysqldump,Linux Shell脚本之利用mysqldump备份MySQL数据库(详细注解)
  7. php 度分秒和小数转化
  8. python自动输入饥荒控制台代码
  9. Hack the box: Bastion
  10. 216 Web 安全色 开发中常用安全色
  11. 锐捷路由器如何配置虚拟服务器,[路由器自动配置方法技巧] 锐捷路由器配置方法...
  12. ubuntu 18.04下greenplum安装笔记(二)安装Greenplum的失败的尝试
  13. Zookeeper、Curator
  14. Excel集成股票分析工具案例
  15. SLAM在机器人中的应用
  16. excel怎么设置颜色的值记录
  17. 禁用微软杀毒和移除以Paint 3D打开的相关注册表:
  18. [ROC-RK3566-PC] 如何编译Linux_SDK并打包Ubuntu系统固件?
  19. linux crash工具用法,使用crash工具看懂slab
  20. 嵌入式Linux——WIFI网卡

热门文章

  1. 2019小程序没必要做了_企业发展小程序的必要原因
  2. MySql视图view的使用:创建、修改、删除
  3. 谷歌大脑AI飞速解锁雅达利,训练不用两小时:预测能力“前所未有”
  4. 当,程序员突然想画画,AI+机器人就该登场了
  5. 一样的打游戏,不一样的酷
  6. Lintcode: Implement Queue by Stacks 解题报告
  7. Flutter:手拉手带你极速构建漂亮的跨平台(iOS/Android)移动应用 ✿ 初识
  8. PHP一阶段 html+css+js 练习题汇总
  9. ssh免密码远程执行sudo命令
  10. TensorFlow教程之API DOC 6.1.1Class tensorflow::Env