c -合併果子
crawling in process...
crawling failed
time limit:1000msmemory limit:131072kb64bit io format:%lld & %llu
submit
status
description
現在有n堆果子,第i堆有ai個果子。現在要把這些果子合併成一堆,每次合併的代價是兩堆果子的總果子數。求合併所有果子的最小代價。
input
第一行包含乙個整數t(t<=50),表示資料組數。
每組資料第一行包含乙個整數n(2<=n<=1000),表示果子的堆數。
第二行包含n個正整數ai(ai<=100),表示每堆果子的果子數。
output
每組資料僅一行,表示最小合併代價。
sample input
241 2 3 4
53 5 2 1 4
sample output
1933
hint
優先佇列的應用,實際上就是相當於一種哈夫曼演算法,每次取最小的兩堆進行合併,將合併後的那堆同樣放入其中進行大小比較。關於優先佇列,可以參考
#include#include#includeusing namespace std;
int main()
printf("%d\n",ans);
}return 0;
}
第一次使用優先佇列做題,其中有兩點需要注意:
priority_queue,greater>q;中的最後兩個》中間要有乙個空格;
取佇列中的元素是q.top(),而不是q.front()。
合併果子(優先佇列)
在乙個果園裡,多多已經將所有的果子打了下來,而且按果子的不同種類分成了不同的堆。多多決定把所有的果子合成一堆。每一次合併,多多可以把兩堆果子合併到一起,消耗的體力等於兩堆果子的重量之和。可以看出,所有的果子經過n 1 n 1次合併之後,就只剩下一堆了。多多在合併果子時總共消耗的體力等於每次合併所耗體...
合併果子優先佇列
合併果子 每次取出兩個最小的,求和之後再放進去,再取出兩個最小的,依次進行下去。當然,每次取出之後都需要累加兩個數。本文使用優先佇列,也就是最小堆實現 typedef long long ll priority queue ll,vector greater pq 從小到大排序優先佇列的大小大於1p...
Vijos P1097 合併果子(優先佇列 貪心)
在乙個果園裡,多多已經將所有的果子打了下來,而且按果子的不同種類分成了不同的堆。多多決定把所有的果子合成一堆。每一次合併,多多可以把兩堆果子合併到一起,消耗的體力等於兩堆果子的重量之和。可以看出,所有的果子經過n 1次合併之後,就只剩下一堆了。多多在合併果子時總共消耗的體力等於每次合併所耗體力之和。...