題目
本題欲將所有堆果子合併為一堆。每個果子重量都為 1,每合併一次消耗的體力等於兩堆果子的重量之和。已知堆數和每堆果子的數量,求消耗最小體力值。
例如有 3 種果子,數目依次為 1, 2, 9。可以先將 1、 2堆合併,新堆數目為 1+2=3 ,耗費體力為 3 。接著,將新堆與原先的第三堆合併,又得到新的堆,數目為 12 ,耗費體力為 12 。所以多多總共耗費體力 為3+12=15。可以證明 15 為最小的體力耗費值。
一開始是正常的方法發現會超時,後來看題解可以用優先佇列。然後就去查了優先佇列…
關於優先佇列
宣告:priority_queue< int >q;
像這道題就是從小到大 priority_queue,greater< int> >q;
(最後兩個》 >之間記得加空格)
如果想從大到小可以 priority_queue,less< int > >q;
操作:q.empty() //如果隊列為空,則返回true,否則返回false
q.size() //返回佇列中元素的個數
q.pop() //刪除隊首元素,但不返回其值
q.top() //返回具有最高優先順序的元素值,但不刪除該元素
q.push(item) //在基於優先順序的適當位置插入新元素
詳細**
#include
using namespace std;
priority_queue,greater< int> >q;
int main()
while(q.size()>=2)
cout《第一次寫 如有錯誤歡迎指正^ _ ^
洛谷 P1090 合併果子
題目描述 在乙個果園裡,多多已經將所有的果子打了下來,而且按果子的不同種類分成了不同的堆。多多決定把所有的果子合成一堆。每一次合併,多多可以把兩堆果子合併到一起,消耗的體力等於兩堆果子的重量之和。可以看出,所有的果子經過n 1次合併之後,就只剩下一堆了。多多在合併果子時總共消耗的體力等於每次合併所耗...
洛谷 P1090 合併果子
在乙個果園裡,多多已經將所有的果子打了下來,而且按果子的不同種類分成了不同的堆。多多決定把所有的果子合成一堆。每一次合併,多多可以把兩堆果子合併到一起,消耗的體力等於兩堆果子的重量之和。可以看出,所有的果子經過 n 1n 1次合併之後,就只剩下一堆了。多多在合併果子時總共消耗的體力等於每次合併所耗體...
洛谷 P1090 合併果子
題目鏈結 題目描述 在乙個果園裡,多多已經將所有的果子打了下來,而且按果子的不同種類分成了不同的堆。多多決定把所有的果子合成一堆。每一次合併,多多可以把兩堆果子合併到一起,消耗的體力等於兩堆果子的重量之和。可以看出,所有的果子經過 n 1n 1 次合併之後,就只剩下一堆了。多多在合併果子時總共消耗的...