NOIP2010普及组专练
1. P1179 数字统计
2.P1199 三国游戏
纸老虎。
2.1 题目含义
给出不同武将之间的默契值,以及某种选将的方法,让小涵胜出游戏,如果能胜出,请给出小涵胜出时获得的最大分数。
2.2主要思路
两重for循环就可以解决问题。
第一重for 循环,用于遍历找到每个数的可能;第二重循环用于找出除去最高默契值的第二高值,再比较机器选择得到的最大默契值,比较二者大小。更新值的结果,最后输出即可。
3.P1158 导弹拦截
3.1 错误思路:
1.对于每个输入的值,不是由系统1拦截,就是由系统2拦截。那么我们可以得到该导弹到系统1,系统2的距离分别是dis1,dis2。于是依次判断,dis1,dis2谁更小,则让该系统对该导弹负责。最后输出值即可。
这种思路的错误在于,每次的贪心不一定是全局的最优解。这种反例肯定存在,我也就不解释了。
3.2 正确思路
方法1:
- 针对输入数据,将每个导弹到系统1,2的距离分别存储
- 将导弹到系统1 的距离按照升序排序,那么导弹到系统2的距离则是一种无序的状态
- 系统1,2将承包所有的导弹,那么不是由系统1拦截的导弹必定由系统2拦截
- 系统1拦截的范围必定是某个范围内的导弹全部拦截【即必定是按照升序排序】
- 找到排序后的某个临界点,判断以该临界点时,得到的最小代价是否最小,全局枚举即可。
- 临界点可以设置成系统1承包的最后一个点。
方法2:
- 将系统1 的距离从大到小的排序,那么第一个距离值则可以设置成代价的初始值。【因为这个系统1从大到小排序必定考虑了所有的导弹,也就是说,所有到导弹距离都不超过排序后的第一个值】
- 从2开始枚举直到n。那么当前系统1的值 加上之前枚举的所有系统2的最大值,将其和每次取最小。得到的解就是必定是最优解。
举例
s1 s2
100 0
99 10
98 3
90 20
83 15
...
13 89
s1代表系统1; s2代表系统2。那么当枚举到83时,即系统1可以覆盖83的范围,但是此时系统2还需要max(0,10,3,20,15) = 20的覆盖。【83可以保证系统1在83后的所有覆盖;20可以保证在83之前的系统2的所有覆盖。】