码迷,mamicode.com
首页 > 其他好文 > 详细

合并果子(哈夫曼树

时间:2020-03-21 09:55:38      阅读:59      评论:0      收藏:0      [点我收藏+]

标签:pac   ++   cto   mes   tor   tar   com   cin   哈夫曼树   

# 题意
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 }

 

 

合并果子(哈夫曼树

标签:pac   ++   cto   mes   tor   tar   com   cin   哈夫曼树   

原文地址:https://www.cnblogs.com/hhyx/p/12536324.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!