codeup 21142: 合并果子(哈夫曼树)

题目链接:点击这里
在这里插入图片描述

#include<cstdio>
#include<queue>
using namespace std;

//代表小顶堆的优先队列
priority_queue<long long, vector<long long>, greater<long long> > q;

int main() 
{
	int n;
	long long temp, x, y, ans = 0;
	scanf("%d", &n);
	for(int i = 0; i < n;i++)
	{
		scanf("%lld", &temp);
		q.push(temp); //将初始重量压入优先队列
	}
	
	while(q.size() > 1)	//只要优先队列中至少有两个元素
	{
		x = q.top();
		q.pop();
		y = q.top();
		q.pop();
		q.push(x + y);  //取出堆顶的两个元素,求和后压入优先队列
		ans += x+y;  //累计求和的结果
	}
	printf("%lld\n", ans);  //ans即为消耗的最小体力
	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章