嘘~ 正在从服务器偷取页面 . . .

[AGC018C] Coins 题解


[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$ 人,然后开始反悔贪心。

  1. 将一个 $x$ 放到 $y$ 去,再从 $y$ 中拿一个到 $x$ 。
  2. 将一个 $x$ 放到 $z$ 去,再从 $z$ 中拿一个到 $x$ 。
  3. 将一个 $y$ 放到 $z$ 去,再从 $z$ 中拿一个到 $y$ 。
  4. 将一个 $x$ 放到 $y$ 去,再从 $y$ 中拿一个到 $z$ ,最后从 $z$ 中拿一个到 $x$ 。
  5. 将一个 $x$ 放到 $z$ 去,再从 $z$ 中拿一个到 $y$ ,最后从 $y$ 中拿一个到 $x$ 。

那么我们维护所有转移产生的贡献即可,也就是弄 $6$ 个堆。

时间复杂度 $\mathcal{O}(n \log n)$

代码详见参考文献1,实现类似 P5470 。


参考文献

[1] https://www.luogu.com.cn/article/3wnlp2ld


文章作者: q779
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-ND 4.0 许可协议。转载请注明来源 q779 !
评论
  目录