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

搬水果

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);
    }
}

全部评论

相关推荐

10-11 17:45
门头沟学院 Java
走吗:别怕 我以前也是这么认为 虽然一面就挂 但是颇有收获!
点赞 评论 收藏
分享
11-09 11:01
济南大学 Java
Java抽象带篮子:外卖项目真得美化一下,可以看看我的详细的外卖话术帖子
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务