问题描述
  Huffman树在编码中有着广泛的应用。在这里,我们只关心Huffman树的构造过程。
  给出一列数{pi}={p0, p1, …, pn-1},用这列数构造Huffman树的过程如下:
  1. 找到{pi}中最小的两个数,设为papb,将papb从{pi}中删除掉,然后将它们的和加入到{pi}中。这个过程的费用记为pa + pb
  2. 重复步骤1,直到{pi}中只剩下一个数。
  在上面的操作过程中,把所有的费用相加,就得到了构造Huffman树的总费用。
  本题任务:对于给定的一个数列,现在请你求出用该数列构造Huffman树的总费用。

  例如,对于数列{pi}={5, 3, 8, 2, 9},Huffman树的构造过程如下:
  1. 找到{5, 3, 8, 2, 9}中最小的两个数,分别是2和3,从{pi}中删除它们并将和5加入,得到{5, 8, 9, 5},费用为5。
  2. 找到{5, 8, 9, 5}中最小的两个数,分别是5和5,从{pi}中删除它们并将和10加入,得到{8, 9, 10},费用为10。
  3. 找到{8, 9, 10}中最小的两个数,分别是8和9,从{pi}中删除它们并将和17加入,得到{10, 17},费用为17。
  4. 找到{10, 17}中最小的两个数,分别是10和17,从{pi}中删除它们并将和27加入,得到{27},费用为27。
  5. 现在,数列中只剩下一个数27,构造过程结束,总费用为5+10+17+27=59。

输入格式
  输入的第一行包含一个正整数nn<=100)。
  接下来是n个正整数,表示p0, p1, …, pn-1,每个数不超过1000。
输出格式
  输出用这些数构造Huffman树的总费用。
样例输入
5
5 3 8 2 9
样例输出
59
 
//动态数组的使用
 #include<iostream>
#include<cstdio>
#include<vector>
#include<algorithm>
using namespace std;
int main(){
int n,t,len,s1,ss=;
cin>>n;
vector<int> s;
for(int i = ;i < n;i++){
cin>>t;
s.push_back(t);
}
//cout<<s.size();
while(s.size()>=){
sort(s.begin(),s.end());
s1=s[]+s[];
s.erase(s.begin()+);
s.erase(s.begin());
s.push_back(s1);
ss=ss+s1;
}
cout<<ss;
return ;
}

最新文章

  1. WPF打包32位和64位程序 运行在ghost WIN7上问题
  2. ThinkPHP登录功能代码
  3. nyoj 62 笨小熊
  4. SLF4J日志门面
  5. DHT网络第一部分研究结果 加入长期在线的node
  6. 微软未公开的 SP
  7. 【技术贴】SqlServer2008 R2 安装失败提示出现以下错误 服务 MSSQLSERVERO
  8. linux下解压压缩rar文件
  9. css系列教程--margin padding column(完结)
  10. ie兼容---haslayout
  11. Acess错误:&quot;文件共享锁定数溢出&quot;
  12. 使用Maven构建和部署J2EE应用程序的EAR文件
  13. CF 319D(Have You Ever Heard About the Word?-模拟)
  14. 恢复PasswordChar 默认值、取消密码框设置
  15. 插入排序法-java案例详解
  16. session知识总结
  17. 我的hibernate学习记录(一)
  18. destruct析构函数里操作文件出现的问题
  19. hadoop fs -text和hadoop fs -cat的区别(转)
  20. CTSC&amp;APIO2018游记

热门文章

  1. python3 控制结构知识及范例
  2. 动手学习Pytorch(4)--过拟合欠拟合及其解决方案
  3. Keras学习系列——神经网络层组件
  4. VFP的数据策略:基础篇
  5. mysql 启动,停止,重启
  6. Web登录配置-H3C-S5120-LI系列
  7. 常见Linux命令学习
  8. Linux学习Day4:管道符、重定向与环境变量
  9. Jenkins集成jacoco收集单元测试覆盖率
  10. Python——捕获异常