NOIP2010普及组专练

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的所有覆盖。】

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

说文科技

看书人不妨赏个酒钱?

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值