定义:在一个没有排好序的数组中,找最长的单调递减或单调递增的序列。
解题思路:通过动态规划解题。假设从0--(i - 1)已经构成了长度为s的递减序列,且这些序列中的末尾值中的最大值为t;
1、如果a[i] < t,则假如到这个序列中去,长度变为s + 1。对应的末尾值变为a[i]。
2、如果a[i] == t, 则说明从0 - i 的最长序列长度为s。
3、如果a[i] > t,a[i]不一定能成为最长序列的末尾值。此时取绝于长度为s - 1的序列的末尾最大值是max。如果max > a[i],则他可以成为长度为s的递减序列。如果max < a[i], 继续往前推, 直到a[i]小于某个末尾的最大值,此时长度为k。那么a[i]是0-i中长度为k + 1的递减序列的最大值。
两个实例:
1.拦截导弹
题目描述:
某国为了防御敌国的导弹袭击,开发出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭,并观测到导弹依次飞来的高度,请计算这套系统最多能