合并果子(哈夫曼树

Posted hhyx

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了合并果子(哈夫曼树相关的知识,希望对你有一定的参考价值。

# 题意
n堆果子,每一堆果子有重量,合并两堆果子小号的体力等于重量之和,所有的果子经过n-1次合并后就剩下一堆,最后消耗的总体力等于所有的和输出消耗的体力的最小值

# 题解
即huffman树,用堆来实现,每次取最小的两个值加起来再存入堆之中,过程累计总和

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 int main(){
 4    ios::sync_with_stdio(0);
 5    cin.tie(0);
 6    cout.tie(0);
 7    int n;
 8    cin>>n;
 9    priority_queue<int,vector<int>,greater<int>>a;
10    for(int i=0;i<n;i++){
11       int x;
12       cin>>x;
13       a.push(x);
14    }
15    int ans=0;
16    for(int i=1;i<n;i++){
17       int x=a.top();
18       a.pop();
19       int y=a.top();
20       a.pop();
21       a.push(x+y);
22       ans+=x+y;
23    }
24    cout<<ans;
25 }

 

 

以上是关于合并果子(哈夫曼树的主要内容,如果未能解决你的问题,请参考以下文章

合并果子

哈夫曼树

贪心-哈夫曼问题

BZOJ 4198[Noi2015]荷马史诗 哈夫曼编码

P1090 合并果子(哈弗曼树)

HDU 5884 Sort (二分+k叉哈夫曼树)