zoukankan      html  css  js  c++  java
  • 动态规划--最长递增子序列

      经典的最长子序列问题,最近编程训练遇到此题苦无思路,在网上找到比较规范的解答,细思两天后还是觉得有点问题,现在整理总结如下:

    参照 https://www.cnblogs.com/hapjin/p/5597658.html

    1. 问题描述:

    给定一个序列,求解它的最长 递增 子序列 的长度。比如: arr[] = {3,1,4,1,5,9,2,6,5}   的最长递增子序列长度为4。即为:1,4,5,9

    2.DP算法分析:

    按照上述作者的解答  

    ①最优子问题

    设lis[i] 表示索引为 [0...i] 上的数组上的 最长递增子序列。初始时,lis[i]=1,注意,在DP中,初始值是很重要的,它是整个算法运行正确的关键。而初始值 则可以 通过 画一个小的示例来 确定。

    当 arr[i] > arr[j],lis[i] = max{lis[j]}+1 ;其中,j 的取值范围为:0,1...i-1

    当 arr[i] < arr[j],lis[i] = max{lis[j]} ;其中,j 的取值范围为:0,1...i-1 

    ================================================================

    这里的关键是 理解lis[i] = max{lis[j]} +1,max{lis[j]} 表示到第j个元素且以此元素结尾的最长子序列,所以当arr[i]大于末尾元素时,最长子序列应该加第i个元素;

  • 相关阅读:
    努力
    散步
    相信自己
    我仅有的倔强
    存储过程 有用
    面试题整理 !=!=未看 *****面试题整理最全 有用
    项目介绍4 y有用
    面试题;40个多线程的问题 背1 有用
    面试题: redis面试题 有用 redis详细
    数据库相关内容 已看1 有用
  • 原文地址:https://www.cnblogs.com/albertarmstrong/p/7843814.html
Copyright © 2011-2022 走看看