天天看点

笔试算法模拟题精解之“Codancer的炸弹引爆”

【在线编程产品介绍】

阿里云开发者社区在线编程:

免费刷题大神器,助你拿到好offer

周赛月赛不停歇,做题还能领奖品

大赛笔试全真题,常做常新有惊喜

点击链接开始产品体验:

https://developer.aliyun.com/coding 本文为大家介绍的是“121.Codancer的炸弹引爆”的解法探究。先来看一下题目内容:

题目详情

等级:困难

知识点:贪心、优先队列

查看题目:Codancer的炸弹引爆

Codancer终于抵达了恶龙的城堡。现在他在城堡周围摆放了n枚电力炸弹,每个电力炸弹有两种属性m和p,只有已经引爆了m枚电力炸弹或者Codancer直接花费p的电力,第i枚炸弹才会被引爆,现在Codancer想使用最少的电力引爆所有的炸弹,请计算最少需要多少电力?

第一行是一个正整数n,代表有n枚电力炸弹。接下来输入n行,每行两个正整数m和p,代表炸弹的属性。(1<=n<200000,1<=p<=100,1<=m<=n)

输出最少花费多少的电力。

示例1

输入:

3

[[1,5],[2,10],[2,8]]

输出:

8

注意

花费8电力引爆第3枚炸弹,那么第1枚就会被自动引爆,那么第2枚也会被自动引爆。

解题方法:

这种方案的花费是最小的。

笔试算法模拟题精解之“Codancer的炸弹引爆”

炸弹的引爆顺序如图所示。

本题使用贪心策略,考虑按照所需要的电力从大到小排序,假设从第i+1枚到第n枚炸弹已经用电力引爆的炸弹个数为cnt,由于在[1,i-1]最多再引爆i-1枚炸弹,如果此时

i-1+cnt<mi

,说明就需要再花费电力引爆,但是必须要选择需要的电力最少的,因此可以用优先队列维护,直接取出栈顶即可。

时间复杂度:O(n*log(n))

看完之后是不是有了答题思路了呢,快来练练手吧:

121.Codancer的炸弹引爆

在线编程周赛、月赛火热进行中,更有限时答题活动,定制卫衣、双肩背包、机械键盘等多重好礼等你来拿~每天都有好礼相送~点击了解周赛详情:

在线编程3月份比赛正式开启!机械键盘等你拿!
笔试算法模拟题精解之“Codancer的炸弹引爆”

继续阅读