动态规划之最长递增子序列(思路)

问题描述:
一个序列有N个数:A[1],A[2],…,A[N],求最长非降子序列的长度。
这是一个动态规划(Dynamic Programming)思想基本都会讲到的问题—LIS:longest increasing subsequence.
思路:
1)“子序列“和“子串”不同;
子序列在原序列中可以是不连续的,如[3,6,9]为[5,7,3,6,4,9]的子序列;
子串在原序列中必须是连续的,如”abchj”为”gtabchjlut”的子串;
2)此问题最普遍被接受的思路是:定义d[i]—序列[A1,A2,…,Ai]以Ai结尾的最长递增序列的长度。这里把一个上升子序列中最右边的那个数,称为该子序列的“结尾”。乍一看,这个思路和原问题说的是两码事,哪跟哪啊,我自己针对这个思路搜了许多资料,最终才醒悟过来。但是你要这样想:只要这N个子问题都解决了,最终符合要求的最长递增子序列必定属于这N个子问题中的某一个,问题是不就迎刃而解了。
3)网上有关各个语言实现该思路的代码很容易找,我就不贴了。
附:让我顿悟的那篇博客,感谢这位博主!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值