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

哈夫曼树---POJ3253

时间:2016-10-07 20:46:15      阅读:228      评论:0      收藏:0      [点我收藏+]

标签:

http://poj.org/problem?id=3253

技术分享

这就是 最典型的哈夫曼树的题型,我们就根据这道题学习一下哈夫曼树

技术分享

 

 

 这是最开始我们把21据下来之后我们据下8,然后再据下5得到34,可以看出13被用到2次,8被用到1次13*2+8=34。

技术分享

 

这幅图片,我们先据下21,再据下5,再据下8得到34,即16*2+5=37。

所以,对于这道题,我们运用贪心的思想和哈夫曼树

 1 #include<queue>
 2 #include<stdio.h>
 3 using namespace std;
 4 int main()
 5 {
 6     long long int sum;
 7     int i,n,t,a,b;
 8     while(~scanf("%d",&n))
 9     {
10         priority_queue<int,vector<int>,greater<int> >q;
11         for(i=0; i<n; i++)
12         {
13             scanf("%d",&t);
14             q.push(t);
15         }
16         sum=0;
17         if(q.size()==1)
18         {
19             a=q.top();
20             sum+=a;
21             q.pop();
22         }
23         while(q.size()>1)
24         {
25             a=q.top();
26             q.pop();
27             b=q.top();
28             q.pop();
29             t=a+b;
30             sum+=t;
31             q.push(t);
32         }
33         printf("%lld\n",sum);
34     }
35     return 0;
36 }

 

哈夫曼树---POJ3253

标签:

原文地址:http://www.cnblogs.com/shangjindexiaoqingnian/p/5936503.html

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