北京大学郭炜-最长上升子序列 动态规划讲解

问题原型:


解题思路:
找子问题,题目要求我们求1~n的最长上升子序列的长度,那我们想一想:1-2个元素的最长上升子序列的长度是多少,第1个元素的最长上升子序列又是多少?
假设我们输入一个序列:

9
2 7 1 5 6 4 3 8 9

显然
第1个元素的最长上升子序列的长度为1
1-2个元素的最长上升子序列为(2 7),长度为2
1-3个元素的最长上升子序列为(2 7)(2 1),长度为2
1-4个元素的最长上升子序列有(2 7)(2 1)(2 5)(1 5),长度也为2
由此可见,我们是可以通过遍历0~i-1个元素的最长上升子序列来得到i的最长上升子序列的。

我们建立一个和输入序列一样长的数组maxLen,来记录每一个元素从0~该元素位置的最长上升子序列的长度。maxLen中每一个元素的初值为1,因为倘若序列中元素i前面的数字都比i大,那么元素i对应位置的最长上升子序列长度就是自己一单位的长度,即为1。


具体写法我们代码里面说:

#include "iostream"
#include <vector>
#include <algorithm>
using namespace std;
int main(){int n,elem;vector<int> a,maxLen;cin>>n;for (int i=0;i<n;i++){cin>>elem;a.push_back(elem);// 设置每个元素默认最长上升子序列为1maxLen.push_back(1);//maxLen记录的是第0个元素到第i个元素的最长上升子序列的长度}//第一层for循环遍历输入的每一个元素,找出该元素的最长上升子序列的长度for (int i=1;i<n;i++){//第二层for循环遍历该元素前所有的元素for (int j=0;j<i;j++){//如果元素a[i]大于元素a[j],说明序列上升了if (a[i]>a[j]){maxLen[i] = max(maxLen[i],maxLen[j]+1);}}}sort(maxLen.begin(),maxLen.end(),greater<int>());cout<<maxLen[0];
}

北京大学郭炜-最长上升子序列 动态规划讲解相关推荐

  1. 最长公共子序列 - 北京大学郭炜 动态规划代码详解

    最长公共子序列 - 北京大学郭炜 动态规划代码详解 解题思路: 该题可用动态规划解决.动态规划需要我们找出子问题. 假设我们输入两个字符串: ACTTGACC CGTT 那么如何通过动态规划算出其最大 ...

  2. 【ACM】最长公共子序列 - 动态规划

    最长公共子序列 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述 咱们就不拐弯抹角了,如题,需要你做的就是写一个程序,得出最长公共子序列. tip:最长公共子序列也称作最长 ...

  3. 最长上升子序列——动态规划

    这个是用动态规划做的一道题,先学习一下动态规划的概念吧.   用动态规划解题,就是要把问题分解为一个个子问题,对子问题进行求解,而子问题又可以继续进行分解,直到一定小的规模. DP与递归类似,但递归会 ...

  4. C语言(CED)最长公共子序列----动态规划第一题

    一.动态规划算法与分治法的异同 相同点: A.二者均是将待求解的问题分成若干子问题来求解. B.二者在编写代码的时候,都要用到递归. 不同点: A.分治法求解的问题,在将问题分成若干子问题之后,其子问 ...

  5. 最长公共子序列-动态规划(C/C++)

    动态规划简述 使用最优子结构特性,动态规划算法采用自底向上的方式计算,在求解的过程中保存已经计算好的子问题的最优解,当子问题的最优解被重复使用时,无需再次计算直接从保存的空间中调用. 举个例子: 斐波 ...

  6. 最长公共子序列动态规划c语言,动态规划----最长公共子序列(C++实现)

    最长公共子序列 题目描述:给定两个字符串s1 s2 - sn和t1 t2 - tm .求出这两个字符串的最长公共子序列的长度.字符串s1 s2 - sn的子序列指可以表示为 - { i1 < i ...

  7. 最长公共子序列--动态规划(C++)

    动态规划与分治方法类似,都是通过组合子问题来求解原问题.分治法将问题分为互不相交的子问题,递归的求解子问题,再将他们的解组合起来,求出原问题的解.相反的,动态规划用于子问题重叠的情况,即不同的子问题具 ...

  8. python【力扣LeetCode算法题库】300 最长上升子序列(动态规划)

    最长上升子序列 给定一个无序的整数数组,找到其中最长上升子序列的长度. 示例: 输入: [10,9,2,5,3,7,101,18] 输出: 4 解释: 最长的上升子序列是 [2,3,7,101],它的 ...

  9. 116. Leetcode 1143. 最长公共子序列 (动态规划-子序列问题)

    步骤一.确定状态: 确定dp数组及下标含义 dp[i][j]:长度为[0, i - 1]的字符串text1与长度为[0, j - 1]的字符串text2的最长 公共子序列为dp[i][j] 步骤二.推 ...

最新文章

  1. 【机器学习】基于人工鱼群算法的非线性函数寻优
  2. 聚焦AI落地痛点,纵论跨域学习技术前沿和应用趋势 | CNCC技术论坛
  3. Visual Studio 2015价格大幅下调
  4. 加快发展设施业 农业大健康-林裕豪:从玉农业践行基础支撑
  5. sap scc4 客户端设置
  6. 在 Windows 7 中安装上网认证客户端
  7. android 程序退出广播,android 利用广播实现程序的强制退出
  8. centos 安装jdk_CentOS 7 安装 Oracle JDK 8
  9. MongoDB作为windows服务来安装-2
  10. gif分解工具_Python之GIF图倒放,沙雕快乐源泉
  11. 2020蓝桥杯省赛---java---B---4( 合并检测)
  12. CCF201712-1 最小差值
  13. 别再刷百度厂长被浇水啦!来看看大百度APP-首屏秒开优化实践
  14. python爬虫入门
  15. 科技爱好者周刊(第 165 期):全端 App 的时代
  16. Python实现十大经典算法动画图解
  17. Linux下Intel网卡固件烧写工具
  18. [常用工具]深度学习Caffe处理工具
  19. 单车架的ANSYS有限元分析
  20. 关于野火mini led的学习

热门文章

  1. selenium,设置火狐浏览器下载文件时不要弹出弹框问题、以标签页打开新的页面及设置失效问题
  2. 儿童首饰饰品CPC认证怎么办理?饰品CPC测试项目
  3. c++初学者——一个简单的电话簿系统制作
  4. 软件工程--功能规格说明书
  5. 根据客户的姓快速查找相同姓的所有客户的方法
  6. 激光雷达lidar知识点滴
  7. VS2017远程调试 windows 对 windows
  8. cad lisp学习过程记录
  9. 根据三轴加速度计算赛艇划桨数的算法
  10. 苹果手机通话声音小怎么调_手机通话声音小不清晰,打开这几个开关,音量音质立刻提高1倍多...