每日一题:Assassin’s Creed
题目
有 $n$ 个敌人,你现在的武器的耐久度为 $m$,杀每个敌人要消耗 $a_i$ 点耐久度,同时得到可以再杀死 $b_i$ 个人的权利。问最多可以杀死多少人,在杀人最多的情况下最少要消耗多少耐久度?
Solution
首先会想到对人进行分类,一类是 $b_i$ 为 $0$ 的,一类是 $b_i$ 不为 $0$ 的。
杀死一个 $b_i$ 不为 $0$ 的,一定能杀死所有 $b_i$ 不为 $0$ 的,而且还能再额外杀死 $b_i$ 为 $0$ 的,显然只要杀 $a_i$ 最小的那个人即可。
分两种情况:
只杀 $b_i$ 为 $0$ 的,可能原因:没有 $b_i$ 不为 $0$ 的,或者耐久度不够,或者消耗耐久度过大,还不如直接杀 $b_i$ 为 $0$ 来的划算。
杀一个 $b_i$ 不为 $0$的,且消耗耐久度最小的,那么所有的 $b_i$ 不为 $0$ 都将被杀死,额外的免费杀人机会都拿来杀 $b_i$ 为 $0$ 的,用剩下的耐久度从小到大杀剩下的怪即可。但这样有缺陷,可能存在手动杀 $b_i$ 不为 $0$ 的人会更划算,因为这个怪可能消耗的耐久度非常小,而你用这次机会杀 $b_i$ 为 $0$ 的人可能消耗非常大。于是得出结论:所有 $b_i$ 不为 $0$ 的人肯定会被杀死,但我只要把所有的怪按耐久度从小到大杀即可。
两种情况取最大值即可。
Code
1 |
|