合并果子(哈夫曼树
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 }
以上是关于合并果子(哈夫曼树的主要内容,如果未能解决你的问题,请参考以下文章