洛谷:P4653:Sure Bet


洛谷:P4653:Sure Bet

Table of Contents

题目

P44653:Sure Bet

分析

这道题目有一个很明显的特征,就是需要“贪心”:不管A类还是B类灯泡,如果它的“权重”大,肯定要优先选择!这样,在保证权重肯定大于1的情况下,选择一个最大权重的灯泡,一定带来最大的收益(\(=权重-1\))。

同时,为了避免重复计算前k个灯泡的总收益(\(=k个灯泡的总权重-k\)),我们应该考虑到用前缀和。

这是本题的第一个关键点。

第二个关键点,在于如何决定选A类灯泡还是B类灯泡。

考虑样例数据,并进行排序后计算了前缀和:

A类灯泡:
排序后:[1.9, 1.6, 1.4, 1.2]
前缀和:[0, 3.5, 4.9, 6.1]

B类灯泡:
排序后:[3.7, 2.0, 1.5, 1.4]
前缀和:[0, 3.7, 5.7, 7.2, 8.6]

注意,由于在点亮灯泡的时候,随机决定是点亮A类还是B类,所以,收益的最小值是由A/B收益中较小的那个决定的。这个特性决定了我们后续的指针移动策略。

如果:

  1. \(A[i]>B[j]\),此时的下限是\(B[j]-i-j\)。也许我们增加一组B类灯泡会更好。由于现在B[j]存放的是降序排列后的前缀和,所以我们不妨增加B类灯泡的组数,方法是:增加j。。
  2. 反之,此时的下限是\(A[i]-i-j\)。也许我们增加一组A类灯泡会更好。由于现在A[i]存放的是降序排列后的前缀和,我们要增加i

这两个不同的下限的算法,也是本题的另一个要点。

答案

Solution

思考

这是一道非常好的综合题!

Previous Next