[AGC018C] Coins 题解
题目链接:[AGC018C] Coins
题意:
有 $x+y+z$ 个人,第 $i$ 个人有 $A_i$ 个金币,$B_i$ 个银币,$C_i$ 个铜币。
要选出 $x$ 个人获得其金币,选出 $y$ 个人获得其银币,选出 $z$ 个人获得其铜币。在不重复选某个人的情况下,最大化获得的币的总数。
数据范围:
$1\le x+y+z\le 10 ^ 5,1 \le A_i,B_i,C_i \le 10^9$ 。
做法和 P5470 [NOI2019] 序列 类似,经典套路了。
我们可以先凑满 $x,y,z$ 人,然后开始反悔贪心。
- 将一个 $x$ 放到 $y$ 去,再从 $y$ 中拿一个到 $x$ 。
- 将一个 $x$ 放到 $z$ 去,再从 $z$ 中拿一个到 $x$ 。
- 将一个 $y$ 放到 $z$ 去,再从 $z$ 中拿一个到 $y$ 。
- 将一个 $x$ 放到 $y$ 去,再从 $y$ 中拿一个到 $z$ ,最后从 $z$ 中拿一个到 $x$ 。
- 将一个 $x$ 放到 $z$ 去,再从 $z$ 中拿一个到 $y$ ,最后从 $y$ 中拿一个到 $x$ 。
那么我们维护所有转移产生的贡献即可,也就是弄 $6$ 个堆。
时间复杂度 $\mathcal{O}(n \log n)$
代码详见参考文献1,实现类似 P5470 。
参考文献: