P1020 [NOIP1999 普及组] 导弹拦截

该博客讨论了如何在导弹拦截问题中使用贪心算法求解最大拦截数,并介绍了如何利用数据结构优化查找策略。文章详细分析了如何判断导弹拦截顺序,并解释了为何覆盖不影响结果。对于求最少需要几套系统的问题,提到了使用`upper_bound()`和`lower_bound()`函数进行查找,并提及`greater<>`排序技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、题目描述

二、 思路分析

  • 第一问 求一套系统的最大拦截数——贪心
以题目样例为例
389 207 155 300 299 170 158 65

创建一个数组存储拦截的导弹从前往后,依次判断,只要当前的导弹高度低于上一发导弹就拦截它,将它的高度填入数组,此时这个高度作为新的判断标准。

 若此时的导弹高度高于上一发导弹,不能急着舍弃它,需要判断如果在前面可拦截此时这发导弹的条件之下,拦截这发导弹是否能获得更大的拦截数,即最优解。

所以此时在前面填入的数据中找到最近的高于此时的导弹的高度的值,即389。

此时单看数组中的数据可能会觉得别扭,因为高度为155的导弹在高度为300的导弹之前过来,但却存在300之后的位置。 其实数组中具体的数据是什么无所谓,我们需要知道的是此时拦截的最后一发导弹的高度(300)和数组中存入的元素的个

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值