首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

天勤OJ 标题1106: 哈夫曼树

2013-02-19 
天勤OJ 题目1106: 哈夫曼树题目描述哈夫曼树,第一行输入一个数n,表示叶结点的个数。需要用这些叶结点生成哈

天勤OJ 题目1106: 哈夫曼树
题目描述

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

 
输入

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

 
输出

输出权值。

 
样例输入
2
2 8
3
5 11 30
 
样例输出
10
62
 
/**********************************   日期:2013-2-12*   作者:SJF0115*   题号: 天勤OJ 题目1106: 哈夫曼树*   来源:http://acmclub.com/problem.php?id=1106*   结果:AC*   来源:2010年北京邮电大学计算机研究生机试真题*   总结:**********************************/#include<stdio.h>#include<stdlib.h>#include<string.h>//排序函数int cmp(const void *a,const void *b){return *(int *)a - *(int *)b;}int main(){int n,i,TWeight;int array[1001];while(scanf("%d",&n) != EOF){//输入节点for(i = 0;i < n;i++){scanf("%d",&array[i]);}TWeight=0;//所有结点的值与权值的乘积之和for(i = 0;i < n-1;i++){//排序qsort(array+i,n-i,sizeof(array[0]),cmp);TWeight += (array[i] + array[i+1]);array[i+1] = array[i] + array[i+1];}printf("%d\n",TWeight);}return 0;}


热点排行