小根堆求解哈夫曼树问题
#include <iostream> #include "queue" using namespace std; int main() { int n; while (cin >> n) { // 注意 while 处理多个 case // cout << a + b << endl; if (n == 0) break; priority_queue<int, vector<int>, greater<int>> myQueue; while (n--) { int temp; cin >> temp; myQueue.push(temp); } int ans = 0; while (myQueue.size() >= 2) { int a = myQueue.top(); myQueue.pop(); int b = myQueue.top(); myQueue.pop(); ans += a + b; myQueue.push(a + b); } cout<<ans<<endl; } } // 64 位输出请用 printf("%lld")