Think:
1题目理解:T组测试数据,每组测试数据输入两串字符,求最大上升递增子序列
2思考:dp:通过状态转移方程优化节省内层一层for循环?

建议参考博客
参考:
题目大意:T种情况,每种情况2行数据,每行数据第一个表示个数,接下来是一个序列,问两组数据的最长公共递增子序列的长度。
解题思路:当看到这题想到的是LCS和LIS问题,没错这题也是动态规划问题,只要找到状态转移方程就可轻易搞定!
     >_<:LIS设DP[i]表示以第i个数字结尾的最长上升子序列的长度
     >0<:DP[i]=max(DP[j]+1){1<=j<=i-1}
     >_<:LCS设DP[i][j]表示以A串第i个字符结尾以B串第j个字符结尾的最长字串
     >0<:当a[i]==b[j]时:DP[i][j]=DP{i-1][j-1]+1;
       当a[i]!=b[j]时:DP[i][j]=max(DP[i-1][j],DP[i][j-1])
     >_<:LCIS设F[i][j]表示以a串前i个字符b串的前j个字符且以b[j]为结尾构成的LCIS的长度
     >0<:当a[i]!=b[j]时:F[i][j]=F[i-1][j]
       当a[i]==b[j]时:F[i][j]=max(F[i-1][k])+1 1<=k<=j-1 && b[j]>b[k]

vjudge题目链接

以下为Accepted代码——借鉴+_dp

#include <bits/stdc++.h>using namespace std;int f[1004][1004], a[1004], b[1004];int main(){int T, n, m, i, j;scanf("%d", &T);while(T--){scanf("%d", &n);for(i = 1; i <= n; i++)scanf("%d", &a[i]);scanf("%d", &m);for(i = 1; i <= m; i++)scanf("%d", &b[i]);memset(f, 0, sizeof(f));for(i = 1; i <= n; i++){int mav = 0;for(j = 1; j <= m; j++){if(a[i] > b[j] && mav < f[i-1][j])/*更新mav*/mav = f[i-1][j];if(a[i] != b[j])f[i][j] = f[i-1][j];else if(a[i] == b[j])f[i][j] = mav + 1;}}int mav = 0;for(i = 1; i <= m; i++)mav = max(mav, f[n][i]);printf("%d\n", mav);}return 0;
}

以下为Accepted代码——借鉴+_暴力

#include <bits/stdc++.h>using namespace std;int f[1004][1004], a[1004], b[1004];int main(){int T, n, m, i, j, k;scanf("%d", &T);while(T--){scanf("%d", &n);for(i = 1; i <= n; i++)scanf("%d", &a[i]);scanf("%d", &m);for(i = 1; i <= m; i++)scanf("%d", &b[i]);memset(f, 0, sizeof(f));for(i = 1; i <= n; i++){for(j = 1; j <= m; j++){if(a[i] != b[j])f[i][j] = f[i-1][j];else if(a[i] == b[j]){int mav = 0;for(k = 1; k < j; k++)if(b[k] < b[j])mav = max(mav, f[i-1][k]);f[i][j] = mav + 1;}}}int mav = 0;for(i = 1; i <= m; i++)mav = max(mav, f[n][i]);printf("%d\n", mav);}return 0;
}

J - Virus UVA - 12511——最长上升递增子序列相关推荐

  1. 5-3 最长连续递增子序列 (20分)

    5-3 最长连续递增子序列 (20分) 给定一个顺序存储的线性表,请设计一个算法查找该线性表中最长的连续递增子序列.例如,(1,9,2,5,7,3,4,6,8,0)中最长的递增子序列为(3,4,6,8 ...

  2. HDURevenge of Segment Tree(第二长的递增子序列)

    HDURevenge of Segment Tree(第二长的递增子序列) 题目链接 题目大意:这题是求第二长的递增子序列. 解题思路:用n^2的算法来求LIS,可是这里还要记录一下最长的那个序列是否 ...

  3. 习题3.4 最长连续递增子序列 (20 分) 数据结构 PTA

    给定一个顺序存储的线性表,请设计一个算法查找该线性表中最长的连续递增子序列.例如,(1,9,2,5,7,3,4,6,8,0)中最长的递增子序列为(3,4,6,8). 输入格式: 输入第1行给出正整数n ...

  4. 最长单调递增子序列 [转]

    [转] http://skynewborn.blog.sohu.com/66594610.html 单调子序列包含有单调递增子序列和递减子序列,不失一般性,这里只讨论单调递增子序列.首先,从定义上明确 ...

  5. 最长单调递增子序列O(NlogN)算法

     O(NlgN)算法 假设存在一个序列d[1..9] ={ 2,1 ,5 ,3 ,6,4, 8 ,9, 7},可以看出来它的LIS长度为5.  下面一步一步试着找出它.  我们定义一个序列B,然后 ...

  6. 最长单调递增子序列 python_最长单调递增子序列

    前面三篇博客分别讲了贪心,递归,分治,今天就说个简单的动态规划(DP)的题目吧.在我心中DP算是比较难的算法,尤其像状态DP,树形DP,因为实力问题就说一个简单的线性DP--最长单调递增子序列. 题目 ...

  7. java最长单调递增子序列_最长单调递增子序列问题

    最长单调递增子序列问题 题目:设计一个 O( n ^ 2 )复杂度的算法,找出由 n 个数组成的序列的最长单调递增子序列. import java.util.Scanner; public class ...

  8. 动态规划作业 最长单调递增子序列

    动态规划作业 1.最长单调递增子序列 设计一个 O(n2)时间的算法,找出由 n 个数组成的序列 a 的最长单调递增子序列. 提示: 用数组 b[0:n]纪录以 a[i] (0<= i< ...

  9. 最长单调递增子序列(时间复杂度O(nlogn))

    写在前面:仅为个人代码/总结,未必标准,仅供参考!如有错误,还望指出交流,共同进步! 最长单调递增子序列 [题目描述] 找出由n个数组成的序列中的最长单调递增子序列及其长度. [O(n*n)算法解题思 ...

最新文章

  1. pyspark汇总小结
  2. 【c语言】蓝桥杯算法训练 P0505
  3. python——正则表达式
  4. JDK中这些常用方法也有Bug
  5. centos6.4下安装python3.6以及对应的django1.11
  6. 如何获取元素与当前可视区域顶部的距离
  7. hive使用适用场景_Hive 中 Map Join 的适用场景:非等值连接
  8. ESP8266 多通道
  9. 常见移动机器人运动学模型总结(图片版)
  10. java类 家族成员 姓氏_中国史上十大家族,占据中国九大姓,看看有没有你的姓氏...
  11. Eucalyptus云服务平台
  12. mac lnmp 安装mysql_Mac安装LNMP环境
  13. 极进网络(Extreme Networks )Extreme VDX 6940 交换机光模块配置方案
  14. flutter开发的ios应用没法通过爱思等工具浏览文件目录Document
  15. 如何通过IP找到地址?
  16. 事件触发控制 Event-Trigger Control Matlab Code
  17. WordPress关注微信公众号回复可见和阅读更多的方法
  18. 什么是好的录屏软件?5 款值得收藏的屏幕录制软件
  19. JAVAWeb开发:Tomcat出现The origin server did not find a current representation for the target reso...的问题
  20. 华为OD机试 - 跳格子游戏

热门文章

  1. 最新美团java开发3轮技术面+hr面 点评(总结分析)
  2. 工作中遇到的问题及解决方案
  3. 工作碰到的问题解决积累
  4. 机器视觉设计,如何正确的选择相机和镜头?
  5. 高性能计算机与网格的研究开发态势
  6. Java基于springboot高考填报志愿综合参考系统 vue+elementUI
  7. simulink模块,提供xpctarget下驱动源码
  8. vscode 学习(四)如何设置右键使用vscode打开
  9. 解决typora beta版本过期提示
  10. 仿QQ-----开发工具vs2005 相关下载