文章目录 题目大意解题思路代码知识点 题目大意 解题思路 因此我们使用贪心策略构造哈夫曼树,自底向上,每次选取当前最小的两个数构成新节点,直到只剩下一个节点。使用 long long。 代码 #include <iostream> #include <queue> using namespace std; typedef long long ll; priority_queue<ll, vector<ll>, greater<ll> > PQ; int main() { ll N; ll tmp; cin >> N; while(N--) { cin >> tmp; PQ.push(tmp); } ll ans = 0; while(PQ.size() > 1) { ll a = PQ.top(); PQ.pop(); ll b = PQ.top(); PQ.pop(); ans += a+b; PQ.push(a+b); } cout << ans << endl; return 0; } 知识点 构造以int为类型的小顶堆: priority_queue<int , vector<int>, greater<int> > PQ;