开发者社区> 问答> 正文

遇到一个优先队列问题,求解答。

Codancer 终于抵达了恶龙的城堡。现在他在城堡周围摆放了 n 枚电力炸弹,每个电力炸弹有两种属性 m 和 p,只有已经引爆了 m 枚电力炸弹或者 Codancer 直接花费 p 的电力,第 i 枚炸弹才会被引爆,现在 Codancer 想使用最少的电力引爆所有的炸弹,请计算最少需要多少电力?第一行是一个正整数 n,代表有 n 枚电力炸弹。接下来输入n 行,每行两个正整数m和p,代表炸弹的属性。(1<=n<200000,1<=p<=100,1<=m<=n)输出最少花费多少的电力。

展开
收起
游客4skzfvnrxrzbi 2021-12-23 16:38:03 435 0
1 条回答
写回答
取消 提交回答
  • 花费8电力引爆第3枚炸弹,那么第1枚就会被自动引爆,那么第2枚也会被 自动引爆。这种方案的花费是最小的。 image.png 炸弹的引爆顺序如图所示: 本题使用贪心策略,考虑按照所需要的电力从大到小排序,假设从第i+1枚到第 n 枚炸弹已经用电力引爆的炸弹个数为cnt,由于在 [1,i-1] 最多再引爆 i-1枚炸弹, 如果此时 i-1+cnt<mi,说明就需要再花费电力引爆,但是必须要选择需要的电力最 少的,因此可以用优先队列维护,直接取出栈顶即可。 则输入:3 [[1,5],[2,10],[2,8]]
    输出:8

    2021-12-23 18:38:49
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载