题目30:哈夫曼树
来源:互联网 发布:远景suv usb共享网络 编辑:程序博客网 时间:2024/05/24 05:18
http://ac.jobdu.com/problem.php?cid=1040&pid=29
- 题目描述:
哈夫曼树,第一行输入一个数n,表示叶结点的个数。需要用这些叶结点生成哈夫曼树,根据哈夫曼树的概念,这些结点有权值,即weight,题目需要输出所有结点的值与权值的乘积之和。
- 输入:
输入有多组数据。
每组第一行输入一个数n,接着输入n个叶节点(叶节点权值不超过100,2<=n<=1000)。
- 输出:
输出权值。
- 样例输入:
5 1 2 2 5 9
- 样例输出:
37
// 题目30:哈夫曼树.cpp: 主项目文件。//不使用优先队列(堆结构)#include "stdafx.h"#include <cstdio>#include <cstdlib>#include <cstring>#include <iostream>#include <algorithm>#include <vector>#include <string>#include <set>#include <map>#include <queue>#include <stack>using namespace std;const int MAX=1<<30;const int N=20003;int a[N];//int level[N];bool used[N];int n;int selectMin(int length){int minIndex=-1,min=MAX;for(int i=0;i<length;i++){if(!used[i]){if(a[i]<min){min=a[i];minIndex=i;}}}return minIndex;}int huffmanTree(){int wholeWeight=0;//memset(level,0,sizeof(level));memset(used,0,sizeof(used));for(int i=0;i<n-1;i++){int index1=selectMin(n+i);used[index1]=true;int index2=selectMin(n+i);used[index2]=true;a[n+i]=a[index1]+a[index2];wholeWeight+=a[n+i];}return wholeWeight;}int main(){ //freopen("F:\\test.txt","r",stdin);//freopen("F:\\output.txt","w",stdout);while(cin>>n&&n!=0){for(int i=0;i<n;i++)cin>>a[i];int wholeWeight=huffmanTree();cout<<wholeWeight<<endl;} return 0;}
- (题目30)题目1172:哈夫曼树
- 题目30:哈夫曼树
- 30-题目1172:哈夫曼树
- 题目1106: 哈夫曼树
- 题目1172:哈夫曼树
- 题目1172:哈夫曼树
- 题目1172:哈夫曼树
- 题目1172:哈夫曼树
- Jobdu 题目1172:哈夫曼树
- 题目1172:哈夫曼树
- 题目1172:哈夫曼树
- 题目1172:哈夫曼树
- 题目1172:哈夫曼树
- 题目1172:哈夫曼树
- 题目1172:哈夫曼树
- 题目1172:哈夫曼树
- 题目1172:哈夫曼树
- 题目1172:哈夫曼树
- 题目28:堆栈的使用
- 打开或隐藏所有窗口
- copy到底干了什么事情?
- socket阻塞非阻塞区别
- 深入理解Javascript系列:Javascript与Dom上————适用于新手
- 题目30:哈夫曼树
- remove
- 笔记本无线和有线可以同时使用!
- 给table中的列加a href 变成超链接 (推荐)
- JNI的架构和实现方式
- .NET书籍推荐
- MongoDB
- 打開Outlook窗口發送郵件
- Android-电话录音