博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
题目1106: 哈夫曼树
阅读量:4104 次
发布时间:2019-05-25

本文共 1064 字,大约阅读时间需要 3 分钟。

题目描述

哈夫曼树,第一行输入一个数n,表示叶结点的个数。需要用这些叶结点生成哈夫曼树,根据哈夫曼树的概念,这些结点有权值,即weight,题目需要输出所有结点的值与权值的乘积之和。

 

输入

输入有多组数据。
每组第一行输入一个数n,接着输入n个叶节点(叶节点权值不超过100,2<=n<=1000)。

 

输出

输出权值。

 

样例输入
2 2 8 3 5 11 30
 

样例输出
10 62
 

提示 [+]

*** 提示已隐藏,点击上方 [+] 可显示 ***

 

来源

 

/*********************************  *    日期:2013-3-15 *    作者:SJF0115  *    题号: 天勤OJ 题目1106: 哈夫曼树 *    来源:http://www.acmclub.com/problem.php?id=1106 *    结果:AC  *    来源:2010年北京邮电大学计算机研究生机试真题 *    总结: **********************************/#include
#include
#include
using namespace std;int main(){ int i,N,x,Weight; while(scanf("%d",&N) != EOF){ Weight = 0; //建立一个小顶堆 priority_queue
, greater
> MinHeap; //输入n个叶子节点的权值 for(i = 0;i < N;i++){ scanf("%d",&x); MinHeap.push(x); } //当堆中元素大于1 while(MinHeap.size() > 1){ //取出堆中最小的两个元素,他们同一个结点的左右儿子,且双亲结点的权值为他们的和 int a = MinHeap.top(); MinHeap.pop(); int b = MinHeap.top(); MinHeap.pop(); //权值和 Weight += a + b; MinHeap.push(a + b); } printf("%d\n",Weight); }//while return 0;}

此题另一解:

转载地址:http://nkcsi.baihongyu.com/

你可能感兴趣的文章
CentOS(5.8/6.4)linux生产环境若干优化实战
查看>>
终于解决了不能睡眠唤醒和关机黑屏后断电慢的问题
查看>>
让XP系统支持GPT硬盘
查看>>
Linux SWAP 交换分区配置说明
查看>>
Linux系统备份
查看>>
CentOS6.4 LVS+keepalived高可用负载均衡服务配置
查看>>
Windows 2003下网络负载平衡(负载均衡)的配置
查看>>
详解Objective-C runtime
查看>>
如何在Linux下统计高速网络中的流量
查看>>
给Linux系统/网络管理员准备的Nmap命令的29个实用范例
查看>>
使用Linux命令行测试网速
查看>>
Ubuntu/Linux Mint用上仿Win7/Win8主题
查看>>
C++界面库大全2013
查看>>
4个Linux服务器监控工具
查看>>
VS2013编译Qt5.2.1 32位静态库debug-and-release版及结果分享
查看>>
白苹果如何制作自己的OS X 10.9“巨浪”可引导系统安装盘?
查看>>
在Ubuntu、Linux Mint上安装Mac OS X主题
查看>>
Windows系统中MySQL 5.6的配置文件(my.ini)修改方法
查看>>
mysql配置优化(windows下my.ini)
查看>>
Windows环境下免安装版MySQL 5.6.11安装配置详解
查看>>