题解 | #搬水果#

搬水果

https://www.nowcoder.com/practice/e4c775b0f3ee42a4bb72c26d2e1eef8a

小根堆求解哈夫曼树问题

#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")

全部评论

相关推荐

不愿透露姓名的神秘牛友
昨天 10:48
点赞 评论 收藏
分享
10-15 09:13
已编辑
天津大学 soc前端设计
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务