天天看點

筆試算法模拟題精解之“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的炸彈引爆”

繼續閱讀