暑期集训之哈夫曼树
来源:互联网 发布:录像变脸软件是什么 编辑:程序博客网 时间:2024/05/29 07:53
- 题目描述:
哈夫曼树,第一行输入一个数n,表示叶结点的个数。需要用这些叶结点生成哈夫曼树,根据哈夫曼树的概念,这些结点有权值,即weight,题目需要输出所有结点的值与权值的乘积之和。
- 输入:
输入有多组数据。
每组第一行输入一个数n,接着输入n个叶节点(叶节点权值不超过100,2<=n<=1000)。
- 输出:
输出权值。
- 样例输入:
5 1 2 2 5 9
- 样例输出:
37
哈夫曼树的知识点
好了,相信看了这些东西也就明白是怎么回事了,所以,回到题目,这道题实际上就是找那个最优的情况的权值和,所以用两个数组和一个sort排序就可以实现了,不过这道题也确实有比较高深的做法,涉及到优先序列的用法,个人表示不是很会用,所以先把我的AC代码发上去:
#include<stdio.h>#include<algorithm>#include<string.h>using namespace std;bool cmp(int a,int b){return a>b;}int main(){ int n;while(scanf("%d",&n)!=EOF){ int k=n;int a[1005],b[1005];for(int i=0;i<n;i++)scanf("%d",&a[i]); for(int j=1;j<k;j++){sort(a,a+n,cmp);a[n-2]=a[n-1]+a[n-2];b[j]=a[n-2];n--; } int sum=0; for(int i=1;i<k;i++) { sum=sum+b[i]; } printf("%d\n",sum);} }
这个理解起来其实很简单,把问题简单化了,不过如果觉得简单的话可以看下下面这位大神的做法,用到了优先队列的用法,可以学习一下
哈夫曼树 优先队列解决办法
当然还有一种就是建树的思想,也是比较高级的方法,想学习的话也可以看看
哈夫曼树 建树解决办法
阅读全文
1 0
- 暑期集训之哈夫曼树
- 暑期集训之最小公倍数
- 暑期集训之cake
- 暑期集训之Array
- 暑期集训之ZOJ
- 暑期集训之Subsequence
- 暑期集训之pie
- 暑期集训之Highways
- 暑期集训之感
- 暑期集训之最大公约数问题
- 暑期集训之立方求和
- 暑期集训之EXCEL排序
- 暑期集训之稳定排序
- 暑期集训之寻找大富翁
- 暑期集训之阶乘之和
- 暑期集训
- 暑期集训之美素数问题
- 暑期集训之一般素数的判断
- day4
- eclipse git处理冲突
- swap()使用情况
- 百练_3143:验证“歌德巴赫猜想”
- Android 悬浮窗口(及解决6.0以上无法显示问题)
- 暑期集训之哈夫曼树
- Jmeter学习之抓手机app的接口数据包
- MySQL表中索引、主键和唯一性的区别
- 软件耦合度的计算公式
- 用Kotlin简化代码
- game
- 版本迭代与App Store上架
- js中的隐式转换
- mybatis Example条件查询