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个元素;

  • 相关阅读:
    ABP Xunit单元测试 第五篇
    ABP 异常处理 第四篇
    ABP Quartz 作业调度第三篇
    ABP 权限拦截 第二篇
    ABP .NET corej 版本 第一篇
    Vue生命周期
    vue中的import、export、requre的区别
    ES6最新语法
    Vux项目搭建
    对象克隆
  • 原文地址:https://www.cnblogs.com/albertarmstrong/p/7843814.html
Copyright © 2011-2022 走看看