hunnuoj10163 合併果子

2021-07-16 13:31:38 字數 1362 閱讀 5636

合併果子

time limit:2000ms,special time limit:5000ms,memory limit:32768kb

total submit users:35,accepted users:26

problem 10163 :no special judgement

problem description

在乙個果園裡,多多已經將所有的果子打了下來,而且按果子的不同種類分成了不同的堆。多多決定把所有的果子合成一堆。

每一次合併,多多可以把兩堆果子合併到一起,消耗的體力等於兩堆果子的重量之和。可以看出,所有的果子經過n-1次合併之後,就只剩下一堆了。多多在合併果子時總共消耗的體力等於每次合併所耗體力之和。

因為還要花大力氣把這些果子搬回家,所以多多在合併果子時要盡可能地節省體力。假定每個果子重量都為1,並且已知果子的種類數和每種果子的數目,你的任務是設計出合併的次序方案,使多多耗費的體力最少,並輸出這個最小的體力耗費值。

例如有3種果子,數目依次為1,2,9。可以先將 1、2堆合併,新堆數目為3,耗費體力為3。接著,將新堆與原先的第三堆合併,又得到新的堆,數目為12,耗費體力為 12。所以多多總共耗費體力=3+12=15。可以證明15為最小的體力耗費值。

input

輸入包括兩行,第一行是乙個整數n(1 <= n <= 10000),表示果子的種類數。第二行包含n個整數,用空格分隔,第i個整數ai(1 <= ai <= 20000)是第i種果子的數目。

output

輸出包括一行,這一行只包含乙個整數,也就是最小的體力耗費值。輸入資料保證這個值小於2的31次方。

sample input

3

1 2 9

sample output

15分析:按照題意,應該每次將最少的兩堆果子合併,來得到最小的體力消耗,關鍵在於每次找最小的兩堆sort一定超時,所以選擇使用set,set使用紅黑樹結構本身插入元素就自帶排序,另外使用優先佇列也可,至於大牛們的赫夫曼編碼我就不太懂了。

#include#include#include#include#include#includeusing namespace std;

int const size=10005;

multisets; //允許重複鍵值

int main()

cout<

1016 計算利息

時間限制 1 秒 記憶體限制 32 兆 特殊判題 否 提交 39 解決 29 為自行解決學費,小明勤工儉學收入10000元以1年定期存入銀行,假設年利率為3.7 利率按年計算,表示100元存1年的利息為3.7元。實際上有時提前有時推遲取,因此實際利息按天計算,1年按365天計算,因此q天的利息是本金...

動態規劃1016

problem description 在一無限大的二維平面中,我們做如下假設 1 每次只能移動一格 2 不能向後走 假設你的目的地是 向上 那麼你可以向左走,可以向右走,也可以向上走,但是不可以向下走 3 走過的格仔立即塌陷無法再走第二次 求走n步不同的方案數 2種走法只要有一步不一樣,即被認為是...

1016 委派任務

description 某偵察隊接到一項緊急任務,要求在a b c d e f六個隊員中盡可能多地挑若干人,但有以下限制條件 1 a和b兩人中至少去一人 2 a和d不能一起去 3 a e和f三人中要派兩人去 4 b和c都去或都不去 5 c和d兩人中去乙個 6 若d不去,則e也不去。問應當讓哪幾個人去...