例3.3 哈夫曼树 - 九度教程第30题(哈夫曼树)
哈夫曼树 - 九度教程第30题
题目:
时间限制:1 秒 内存限制:32 兆 特殊判题:否
题目描述:
哈夫曼树,第一行输入一个数n,表示叶结点的个数。需要用这些叶结点生成哈夫曼树,根据哈夫曼树的概念,这些结点有权值,即weight,题目需要输出所有结点的值与权值的乘积之和。
输入:
输入有多组数据。
每组第一行输入一个数n,接着输入n个叶节点(叶节点权值不超过100,2<=n<=1000)。
输出:
输出权值。
样例输入:
5
1 2 2 5 9
样例输出:
37
来源:
2010年北京邮电大学计算机研究生机试真题
使用优先队列以后,求哈夫曼树的过程不仅时间复杂度降低许多(O(nlogn)),同时代码也轻便不少,所以使用数据结构堆来辅助求解哈夫曼树,是求哈夫曼树的最佳选择。在实际运用中确定哈夫曼树模型,最经典的问题模型为哈夫曼编码、多个数的两两合并等。
代码:
#include<stdio.h>
#include<queue> //标准模板库<queue>
using namespace std;priority_queue<int,vector<int>,greater<int> > Q;//建立一个小顶堆int main()
{int n;while(scanf("%d",&n)!=EOF){while(Q.empty()==false) Q.pop(); //清堆中元素for(int i=1;i<=n;i++) //输入n个叶子节点的权值{int x;scanf("%d",&x);Q.push(x); //将权值放入堆中}int ans=0; //保存答案while(Q.size()>1) //当堆中元素大于1个{int a=Q.top();Q.pop();int b=Q.top();Q.pop(); //取出堆中两个最小元素,它们为同一个结点的左右儿子//且该双亲结点的权值为它们的和ans+=a+b; //该父亲结点必为非叶子节点,固累加其权值Q.push(a+b); //将该双亲结点的权值放回堆中}printf("%d\n",ans);//输出答案}return 0;
}
例3.3 哈夫曼树 - 九度教程第30题(哈夫曼树)相关推荐
- Piggy-Bank - 九度教程第 102 题
Piggy-Bank - 九度教程第 102 题 题目 时间限制:1 秒 内存限制:32 兆 特殊判题:否 题目描述: Before ACM can do anything, a budget mus ...
- 质因数的个数 - 九度教程第54题
质因数的个数 - 九度教程第54题 题目 时间限制:1 秒 内存限制:32 兆 特殊判题:否 题目描述: 求正整数 N(N>1)的质因数的个数. 相同的质因数需要重复计算.如 120=22235 ...
- 不容易系列之一(九度教程第 94 题)
不容易系列之一(九度教程第 94 题) 时间限制:1 秒 内存限制:128 兆 特殊判题:否 1.题目描述: 大家常常感慨,要做好一件事情真的不容易,确实,失败比成功容易多了!做好"一件&q ...
- Excel排序 九度教程第4题
题目链接 题目描述: Excel可以对一组纪录按任意指定列排序.现请你编写程序实现类似功能. 对每个测试用例,首先输出1行"Case i:",其中 i 是测试用例的编号(从1开始) ...
- 数制转换 九度教程第44题 a进制数转换为b进制数 不同进制之间相互转换
题目链接 解题思路: 1.将a进制数转换成十进制数: 2.将十进制数转换成b进制数: 3.使用do while 循环,可以确保即使被转换数字是 0 ,程序也能正常工作. AC代码: #include& ...
- 九度oj 题目1172:哈夫曼树
题目描述: 哈夫曼树,第一行输入一个数n,表示叶结点的个数.需要用这些叶结点生成哈夫曼树,根据哈夫曼树的概念,这些结点有权值,即weight,题目需要输出所有结点的值与权值的乘积之和. 输入: 输入有 ...
- 九度oj 第1题 二维数组中的查找 何海涛:《剑指Offer:名企面试官精讲典型编程题》
一.题目信息 题目描述: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 输入: ...
- 成绩排序 九度教程c语言,九度OJ 1089 数字反转
题目分析: 使用队列存放每一位的数字,然后输出并计算得到反转数值,从而实现数字反转. 源代码: [cpp] #include #include using namespace std; int mai ...
- 动态规划 背包问题小结 0-1背包(采药 九度第101题) 完全背包(Piggy-Bank POJ 1384) 多重背包(珍惜现在,感恩生活 九度第103题)
本小结介绍0-1背包.完全背包以及多重背包问题 记忆要点: 0-1背包:二维数组情况下,顺序遍历体积或者倒序均可以 降维情况下需倒序遍历体积 完全背包:数组降维+顺序遍历 ...
- 哈夫曼编码(基于哈夫曼树-最优二叉树,不唯一)、B树(b-树)、B+树
整合自: http://blog.csdn.net/shuangde800/article/details/7341289 http://www.cnblogs.com/Jezze/archive/2 ...
最新文章
- python的__get__、__set__、__delete__(1)
- PAT甲级1027 Colors in Mars :[C++题解]进制位
- mina 粘包、多包和少包的解决方法
- unix环境高级编程基础知识之第二篇(3)
- 红黑树实现——STL中的map
- 08 | RNN 与 LSTM:模型也可以持续不断地思考
- linux系统调用函数---12
- SecureCRT日志上添加时间戳
- 设计模式快速学习(五)原型模式
- 常见错误及细小知识点锦集
- EasyUi-1 拖放
- JS中的语音识别——Speech Recognition API
- 游戏开发筑基之特殊输入函数的妙用(C语言)
- Python的包管理工具
- 优雅的监听软键盘隐藏
- 无需服务端的多平台同步利器(btsync)
- linux移动硬盘hd0,怎样将UbuntuLinux系统放到移动硬盘?
- 网页里面嵌入视频代码
- 众数问题c语言编程,C语言 众数问题
- 横河变送器EJA110E-JMS4J-919EA
热门文章
- V-rep学习笔记:转动关节1
- 清华大学中国人工智能学会:2019人工智能发展报告
- 传智播客Java实现键盘数据的录入和if
- Atitit git 使用法v2 目录 1. Git客户端工具	1 1.1. Tortoisegit git gui 图形化工具。。	1 1.2. Ide中的git插件(eclipse idea
- Atitit m4a文件元数据结构 目录 1. 一、基本概念	1 2. MP4文件由若干称为Atom(或称为box)的数据对象组成,	2 2.1. MP4文件概述	2 2.2. M4A没有视频流而已
- atitit.颜色查找 根据范围 图像处理 inRange
- Atitti 文本分类 以及 垃圾邮件 判断原理 以及贝叶斯算法的应用解决方案
- atitit.提升稳定性---hibernate 增加重试retry 机制解决数据库连接关闭
- paip.编程压缩Access数据库
- paip.设置鼠标灵敏度API