解析:
要想最後花費最少,肯定每次要加入兩個最小值。
所以貪心思路,就是每次取剩餘堆的兩個最小值相加,相加以後,把它放入佇列。
使用優先佇列實現:
priority_queue,greater > q;//優先為小的優先佇列
因為合併所有,最多也就是n-1次,所以for遍歷n-1次即可。
#include#include#include
#include
#include
#include
#include
#include
using
namespace
std;
priority_queue
,greater > q;//
優先為小的優先佇列
typedef long
long
ll;const
int maxn=1e5+20
;int
a[maxn];
struct
node
st[maxn];
bool
cmp(node a , node b)
intmain()
if(n==1
) cout
<1]
cout
}}
洛谷 P1090 合併果子 優先佇列
description 在乙個果園裡,多多已經將所有的果子打了下來,而且按果子的不同種類分成了不同的堆。多多決定把所有的果子合成一堆。每一次合併,多多可以把兩堆果子合併到一起,消耗的體力等於兩堆果子的重量之和。可以看出,所有的果子經過 n 1n 1n 1 次合併之後,就只剩下一堆了。多多在合併果子時...
洛谷 P1090 合併果子
題目描述 在乙個果園裡,多多已經將所有的果子打了下來,而且按果子的不同種類分成了不同的堆。多多決定把所有的果子合成一堆。每一次合併,多多可以把兩堆果子合併到一起,消耗的體力等於兩堆果子的重量之和。可以看出,所有的果子經過n 1次合併之後,就只剩下一堆了。多多在合併果子時總共消耗的體力等於每次合併所耗...
洛谷 P1090 合併果子
在乙個果園裡,多多已經將所有的果子打了下來,而且按果子的不同種類分成了不同的堆。多多決定把所有的果子合成一堆。每一次合併,多多可以把兩堆果子合併到一起,消耗的體力等於兩堆果子的重量之和。可以看出,所有的果子經過 n 1n 1次合併之後,就只剩下一堆了。多多在合併果子時總共消耗的體力等於每次合併所耗體...