HDU1257 导弹拦截
题目大意
某国为了防御导弹,开发了一种导弹拦截系统。这种系统具有缺陷,它在拦截一枚导弹后就不能再拦截高度大于当前导弹的其余导弹了。现在检测到了导弹袭击,问最少部署多少套系统可以拦截所有导弹?
输入
输入若干组数据.每组数据包括:导弹总个数(正整数),导弹依此飞来的高度(雷达给出的高度数据是不大于30000的正整数,用空格分隔)。
输出
对应每组数据输出拦截所有导弹最少要配备多少套这种导弹拦截系统
样例
Input:8 389 207 155 300 299 170 158 65
Output:2
思路
题意分析
题目要求用最少的导弹拦截系统拦截所有导弹,并且系统每拦截一个导弹,它之后就不能再拦截超过当前高度的导弹了。
举个例子,这个是题目给的样例:
389 \color{#00FF00}{389} 389 207 \color{#00FF00}{207} 207 155 \color{#00FF00}{155} 155 300 \color{#FF3030}{300} 300 299 \color{#FF3030}{299} 299 170 \color{#FF3030}{170} 170 158 \color{#FF3030}{158} 158 65 \color{#00FF00}{65} 65
注意它们的颜色,如果我们让一套系统拦截红色导弹,第二套系统拦截绿色导弹,那么就只需要两套系统就可以完成任务。如果让每套系统都拦截尽可能多的导弹,自然需要的系统数量可以降到最低。这其实是一种贪心策略。那么如何证明这种贪心策略是正确的呢?
贪心策略以及正确性
已知系统每拦截一次导弹,它就会变得更“不好”。为了延缓这种趋势,让每套系统可以拦截更多导弹,系统针对每个导弹就应该有所选择:
那么,针对每个导弹:
- 选择一:如果现有的系统的可拦截高度都小于当前导弹的高度,则部署一套新系统。
- 选择二:使用当前可拦截当前导弹的最“坏”系统进行拦截。最坏是指此系统是所有可拦截此导弹的系统中目前拦截高度最低的。
那么如何证明正确性呢?
我们可以假设 A A A为贪心算法得到的系统个数, B B B表示题目的最优解。那么我们只需证明 A ≥