题解 | #搬水果#优先级队列解决

搬水果

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

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <stack>
#include <map>
#include <queue>
#include <cmath>
using namespace std;

//哈夫曼树问题

int main() {
    int n;
    priority_queue<int> que;
    while (scanf("%d", &n) != EOF) {
        if (n == 0) {
            break;
        }
        for (int i = 0; i < n; i++) { //输入数据
            int t;
            scanf("%d", &t);
            que.push(-t);  //变成小根堆
        }
        int total = 0;
        for (int i = 0; i < n - 1; i++) { //一共n-1次合并
            int t1 = que.top();
            que.pop();
            int t2 = que.top();
            que.pop();
            total = total + t1 + t2; //消耗的体力
            que.push(t1 + t2); //把新的放入队列中
        }
        printf("%d\n", -total);
    }
}

全部评论

相关推荐

头像
11-21 11:39
四川大学 Java
是红鸢啊:忘了还没结束,还有字节的5k 违约金
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务