#include <iostream>
using namespace std;
#include <algorithm>
#include <queue>
int main()
{
// 请在此输入您的代码
int n;
cin >> n; //数入一个整数n
priority_queue<long long,vector<long long>,greater<long long>> heap;//创建一个小顶堆
while(n--) //循环n次,读入n个数字
{
long long x;
cin >> x; //读入一个长整型数字x
heap.push(x); //将数字x插入小顶堆
}
long long res = 0;//初始化结果变量为0
while(heap.size() > 1)//当小顶堆中的元素个数大于1时
{
long long x = heap.top();//取出小顶堆的顶部元素(最小值)
heap.pop();//弹出小顶堆的顶部元素
long long y = heap.top();//取出小顶堆的新的顶部元素(次小值)
heap.pop();//弹出小顶堆的顶部元素
long long sum = x + y;//计算x和y的和
res += sum;//将sum累加到结果变量res中
heap.push(sum);//将sum插入小顶堆
}
cout << res << endl;//输出结果res
return 0;
}
蓝桥--小明的衣服(贪心、小顶堆、哈夫曼树)
于 2023-11-20 21:35:29 首次发布