其他分享
首页 > 其他分享> > 【刷题】动态规划——最长上升子序列:拦截导弹

【刷题】动态规划——最长上升子序列:拦截导弹

作者:互联网

在这里插入图片描述
第一问就是普通的最长下降子序列,重点是第二问。

先给出贪心策略:
首先假设已有若干套系统拦截了导弹,对于一个新来的导弹X:
1、如果已有的系统能够拦截X,很自然的想法是把他丢到已有系统中末尾最小的,因为这样其他系统的末尾才能尽可能大,拦截更多的导弹。
2、如果已有系统都不能拦截X,那么创建一个新的系统。


问题是如何证明这个贪心是对的?

假设A是贪心法得到的序列数,B是最优解得到的序列数,显然B的序列是最少的,即B <= A。

现在有若干序列,新来了导弹X,假设贪心法和最优解使X接在了不同的序列后面
。。。。。
。。。。。
。。。a X 贪心法
。。。。。
。。。b X 最优解
由贪心法知,a一定是所有序列里,末尾小于X的最小的数,所以a <= b。

假设俩序列在后续步骤中分别变成
。。。a X 。。。 贪心法
。。。b X 。。 最优解
事实上,交换a和b后面的部分,变成
。。。a X 。。 贪心法
。。。b X 。。。 最优解
并不会增加序列的个数。
所以其实贪心法的解是可以通过一步一步慢慢交换,变成最优解的解。因此贪心法的序列数是不多于最优解的
故A <= B
综上A = B

标签:拦截导弹,假设,系统,序列,最优,刷题,拦截,贪心
来源: https://blog.csdn.net/qq_42581685/article/details/121875414