核心思想: 贪心
Huffman树(算法):
每次将两个最小的堆合并 然后不断向上合并
#include<iostream>
#include<algorithm>
#include<queue> //用小根堆实现找最小堆
using namespace std;
int main()
{
int n;
cin>>n;
priority_queue<int ,vector<int> , greater<int>> heap;
for(int i=0;i<n;i++)
{
int x;
cin>>x;
heap.push(x);
}
int res=0;
while(heap.size()>1)
{
int a = heap.top();heap.pop(); //取出最小的两个堆
int b = heap.top();heap.pop();
res += a+b;
heap.push(a+b);
}
cout<<res<<endl;
return 0;
}