洛谷 P1090 合併果子

2021-10-14 00:26:16 字數 859 閱讀 9260

題目

本題欲將所有堆果子合併為一堆。每個果子重量都為 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 次合併之後,就只剩下一堆了。多多在合併果子時總共消耗的...