一道“最长递增子序列”问题

某天,舟兄考了我一道题:一群人排队,每个人都朝一个方向,而且仰视,这意味着只能看到比自己高的人,而且一个高个子会挡着矮个子。现在给一堆整数,问队里,谁能看到的“高个子”最多。

如:0 4 7 2 5 3 2 6 7 8,能“看得最多”的序列是2 5 6 7 8。

 

一眼望去,真像“最长递增子序列”,按O(NlogN)的算法,结果应该是0 2 3 6 7 8。但 0 是看不到 2 的,因为被挡了。

 

此题用动态规划很容易解决,D[i]表示从队列最开始到第i个人,能看到第i个人的最长序列的长度。

初始 D[0] = 1;

递推 D[i+1] = max { D[j] +1 }, s<j<=i,     其中 s 满足:使D[s]是最后一个大于或等于D[i+1]的位置。

 

最后是 O(n^2) 的样子。比最长递增子序列的最优算法要差。暂不知能否提高。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值