今天做爱奇艺的在线笔试时看到这道题目,这个问题本身见过的,但是当时因为一点小疏忽,导致没有做出来。非常可惜。

问题描述:给出一个序列a1,a2,a3,a4,a5,a6,a7….an,求它的一个子序列(设为s1,s2,…sn),使得这个子序列满足这样的性质,s1< s2< s3< …< sn并且这个子序列的长度最长。找出这个最长序列。(为了简化该类问题,我们将诸如最长下降子序列及最长不上升子序列等问题都看成同一个问题,其实仔细思考就会发现,这其实只是<符号定义上的问题,并不影响问题的实质)
例如有一个序列:1 7 3 5 9 4 8,它的最长上升子序列就是 1 3 4 8 长度为4.

这是一个典型的动态规划问题,动态规划的本质是什么,就是问题阶段的划分和递归公式!

问题阶段的划分
所以我们来重新定义这个问题:
给定一个数列,长度为N,
设Fk为:以数列中第k项结尾的最长递增子序列的长度.
求F1..FN 中的最大值.

很容易发现现在这个问题已经是一个N阶段的问题了。

递推公式
Fk的值应该这样得到,寻找出max{Fi+1} (ai< aj)。

那么我们的思路就应该已经很清晰了。

     #include<vector>                                                                                                                                                                 2 #include<iostream>3 #include<stdio.h>4 5 #define maxsize 10006 using namespace std;7 #include<algorithm>8 vector<int> LIS(vector<int> input){9     int d[maxsize];10     int p[maxsize];11     for(int i=0;i<input.size();i++){12         d[i]=1;13         p[i]=i;14         for(int j=0;j<i;j++){15             if(input[i]>input[j]&&d[i]<=d[j]){16                 d[i]=d[j]+1;17                 p[i]=j;18             }19 20         }21 22     }23     //find the max_index24     int max=-INT_MAX;25     int max_index=0;26     for(int i=0;i<input.size();i++){27         if(d[i]>max){28             max=d[i];29             max_index=i;30         }31 32     }33     //find the path by p34     int fa;35     vector<int> ans;36     for(fa=max_index;fa!=p[fa];fa=p[fa]){37         ans.push_back(input[fa]);38     }39     ans.push_back(input[fa]);40     reverse(ans.begin(),ans.end());41     return ans;42 }
int main(){45     vector<int> input;46     input.push_back(5);                                                                                                                                                          47     input.push_back(56);48     input.push_back(59);49     input.push_back(7);50     input.push_back(71);51    vector<int> ans=LIS(input);52    for(auto item:ans)53        cout<<item<<endl;54    return 0;55 56 }

版权声明:本文为博主原创文章,转载请标明出处。

转载于:https://www.cnblogs.com/fridge/p/4861893.html

动态规划之《寻找最大上升序列》相关推荐

  1. DP方法(动态规划) 寻找最长公共子序列 LCS问题(c++)

    Q:有两个序列x,y.其中x={x1,x2-xm},y={y1,y2-yn}.寻找x与y的最长公共子序列. 注:子序列和子串有区别,字串是连续的,而子序列可间断. 呃(⊙﹏⊙),后面的暂时没时间写了, ...

  2. 新水果取名(动态规划,求两个子序列的最短原序列)

    题目内容: 两种水果杂交出一种新水果,现在给新水果取名,要求这个名字中包含以前两种水果的字母,且名字尽量短,即:以前的水果名字arr1.arr2是新水果名arr12的子序列,使用动态规划的思想设计算法 ...

  3. 【动态规划】最长公子序列 - dp

    问题描述: 求出两个字符串中的最长公子序列的长度. 输入: cnblog belong 输出: max length = 4 #include <stdio.h> #include < ...

  4. 动态规划-泰波那契序列

    泰波那契序列 Tn 定义如下: T0 = 0, T1 = 1, T2 = 1, 且在 n >= 0 的条件下 Tn+3 = Tn + Tn+1 + Tn+2 给你整数 n,请返回第 n 个泰波那 ...

  5. DS-007 顺序表-寻找两个序列的中位数

    题目:一个长度为L(L≥1)的升序序列S,处在第[L/2]个位置的数称为S的中位数.例如列S1=(11,13,15,17,19),则S1中的中位数是15.两个序列的中位数是含它们所有元素的升序序列的中 ...

  6. ECCV 2022 | 浙大提出:基于骨骼点的少样本动作识别

    点击下方卡片,关注"CVer"公众号 AI/CV重磅干货,第一时间送达 作者:Dropooict |  已授权转载(源:知乎)编辑:CVer https://zhuanlan.zh ...

  7. 北京大学生物信息学学习(3动态规划进行2序列比对的原理 )

    链接 https://www.bilibili.com/video/BV1by4y1k7rc?p=6 北京大学生物信息学公开课之动态规划进行2序列比对 掌握主流的生物信息学的原理,然后让生物信息学为你 ...

  8. 动态规划:最长子序列问题

    关于动态规划中的最长子序列问题有很多优秀的解读,在这里推荐一位博主的关于最长子序列的文章,非常不错,配有大量的图片和文字解答,在这里推荐给大家.本文章转载自这里 1.基本概念 首先需要科普一下,最长公 ...

  9. 动态规划(DP)通俗讲解

    参考 徐凯强 Andy 动态规划中递推式的求解方法不是动态规划的本质. 我曾经作为省队成员参加过NOI,保送之后也给学校参加NOIP的同学多次讲过动态规划,我试着讲一下我理解的动态规划,争取深入浅出. ...

最新文章

  1. 使用Application.GetResourceStream从XAP安装包加载任意资源
  2. DPDK — PDUMP 抓包工具
  3. 阿里云OSS Multipart Upload上传实例
  4. 395. Longest Substring with At Least K Repeating Characters
  5. Android 菜单(OptionMenu)大全 建立你自己的菜单
  6. CSS学习总结3:CSS定位
  7. c# 利用t4模板,自动生成Model类
  8. 随机样例生成器(外观优化)
  9. windows10连接小米耳机Redmi AirDots 2
  10. 最强大脑记忆曲线(4)——关于项目中的全局变量
  11. XCTF-高手进阶区:mfw
  12. 主键主键外键和索引_主键和外键之间的区别
  13. Linux 网桥代码分析 六 网桥数据转发函数分析
  14. 【Java EE】-Servlet(一) 创建Maven下的webapp项目
  15. 慕课网-Java入门第二季实战练习-答答租车系统下载
  16. c语言遍历枚举,C# Enum 类型遍历
  17. 51单片机 —— 计时器
  18. python自动发邮件报554错误_python-自动化测试结果发送邮件报错(smtplib.SMTPDataError: (554, b'DT:SPM 163……)解决方法...
  19. eclips启动code=13的处理经验
  20. Canvas 填充渐变

热门文章

  1. Windows 命令模式下删除驱动
  2. 透明背景html,HTML透明背景
  3. 用crt连接远程linux,在windows下secureCRT远程安全连接linux
  4. kahn是什么牌子_老佛爷百货
  5. 嵌入式工程师是硬件工程师么‘_硬件工程师修炼真经
  6. win10电脑插耳机没声音_Win10如何录制电脑内部声音
  7. lol手游账号被移至美洲服务器,LOL手游“行窃预兆”遭玩家嫌弃,移除偷钱后成最鸡肋符文?...
  8. 实现100倍加速!谷歌开源超强张量计算库TensorNetwork
  9. FIIL邬宁:AI能锦上添花,但耳机成不了下一个智能音箱
  10. 牛客OI周赛6-提高组 B 践踏