7-1 修理牧场(25 分)
农夫要修理牧场的一段栅栏,他测量了栅栏,发现需要N块木头,每块木头长度为整数L
​i
​​ 个长度单位,于是他购买了一条很长的、能锯成N块的木头,即该木头的长度是L
​i
​​ 的总和。

但是农夫自己没有锯子,请人锯木的酬金跟这段木头的长度成正比。为简单起见,不妨就设酬金等于所锯木头的长度。例如,要将长度为20的木头锯成长度为8、7和5的三段,第一次锯木头花费20,将木头锯成12和8;第二次锯木头花费12,将长度为12的木头锯成7和5,总花费为32。如果第一次将木头锯成15和5,则第二次锯木头花费15,总花费为35(大于32)。

请编写程序帮助农夫计算将木头锯成N块的最少花费。

输入格式:
输入首先给出正整数N(≤10的​4 次幂),表示要将木头锯成N块。第二行给出N个正整数(≤50),表示每段木块的长度。
输出格式:
输出一个整数,即将木头锯成N块的最少花费。

输入样例:
8
4 5 1 2 1 3 1 1
输出样例:
49
根据题意可知,求最少花费即为构造哈夫曼树的过程。

代码如下:

#include<iostream>
#include<vector>
using namespace std;
void Sum(vector<int> &arr)
{int total=0;//总花费while(arr.size()>1){int min1=arr[0];//权值最小的两个值int pos1=0,pos2=0;//当前最小结点的下标int tmp=0;//保存当前两个最小结点的权值之和for(int i=1; i<arr.size(); i++){if(arr[i]<min1){min1=arr[i];pos1=i;}}tmp+=min1;arr.erase(arr.begin()+pos1);int min2=arr[0];//删除一个数之后的第一个元素for(int i=1; i<arr.size(); i++){if(arr[i]<min2){min2=arr[i];pos2=i;}}tmp+=min2;arr.erase(arr.begin()+pos2);total+=tmp;arr.push_back(tmp);}cout<<total;
}
int main()
{int N,W;cin>>N;vector<int> weight;for(int i=0; i<N; i++){cin>>W;weight.push_back(W);}Sum(weight);return 0;
}

修理牧场(哈夫曼树)相关推荐

  1. 修理牧场(哈夫曼树 )

    农夫要修理牧场的一段栅栏,他测量了栅栏,发现需要N块木头,每块木头长度为整数L​i​​个长度单位,于是他购买了一条很长的.能锯成N块的木头,即该木头的长度是L​i​​的总和. 但是农夫自己没有锯子,请 ...

  2. 修理牧场( 哈夫曼算法 ,贪心 )

    描述: 农夫要修理牧场的一段栅栏,他测量了栅栏,发现需要N块木头,每块木头长度为整数Li个长度单位,于是他购买了一条很长的.能锯成N块的木头,即该木头的长度是Li 的总和. 但是农夫自己没有锯子,请人 ...

  3. Python---哈夫曼树---Huffman Tree

    今天要讲的是天才哈夫曼的哈夫曼编码,这是树形数据结构的一个典型应用. !!!敲黑板!!!哈夫曼树的构建以及编码方式将是我们的学习重点. 老方式,代码+解释,手把手教你Python完成哈夫曼编码的全过程 ...

  4. 优先级队列实现哈夫曼树的编码和译码

    //优先级队列实现的哈夫曼树的编码和译码 #include<iostream> #include<queue> #include<string> using nam ...

  5. HDU1053 Entropy 哈夫曼树

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1053 认真读题,别怕题长,此题考查的就是哈夫曼树并求出最小编码值,注意每一次要将数组清0,否则会出错! ...

  6. 数据结构与算法(6-5)二叉树的应用--哈夫曼树与哈夫曼编码

    目录 哈夫曼编码(最优二叉树) 一.优势:缩短电文长度 二.思想: 三.过程: 四.图解实现过程: 五.总代码 哈夫曼编码(最优二叉树) 一.优势:缩短电文长度 二.思想: 获取每个字符出现的频率,用 ...

  7. java振动数据压缩_【数据结构-Java】最佳实践-数据压缩(使用赫夫曼树)

    一.需求 将给出的一段文本,比如 "i like like like java do you like a java" , 根据前面的讲的赫夫曼编码原理,对其进行数据压缩处理 二. ...

  8. 哈夫曼树的java实现_java实现哈夫曼树

    哈夫曼译码,就是将输入的译码还原成对应的字符. 抽象的算法描述:将建立哈夫曼树.实现哈夫曼编码.哈夫曼译码都定义成 子函数的的形式, 然后在主函数中调用它们...... 数据结构课程设计设计题目: 哈 ...

  9. 哈夫曼树的生成及哈夫曼编码

    首先构造哈夫曼树结构体,初始化哈夫曼树的四个无符号整型域,输入文本,统计各个字符的权值,然后构建哈夫曼树,从根到叶子逆向求哈夫曼树的编码. #include"stdio.h" #i ...

最新文章

  1. Keras【Deep Learning With Python】逻辑回归·softmax多分类与交叉熵
  2. 如何判断一个点是否在一个多边形内?
  3. Getting Started With Hazelcast 读书笔记(第七章)
  4. wince中重启网卡
  5. JSCore的基本使用
  6. Lucas+阶乘打表+费马小定理模板2.0
  7. 基于人脸识别的宿舍门禁系统
  8. java计算机毕业设计网上鲜花交易平台源代码+数据库+系统+lw文档
  9. R语言处理非线性回归模型C-D方程,【译文】R语言非线性回归入门
  10. Telltale:简化了Netflix应用程序监视
  11. 在日本申报个人所得税流程
  12. 陀螺仪mpu6050的使用(附带HAL的使用)
  13. Python用requests库+BeautifulSoup库+re库获取微博热搜(有详解)
  14. matlab生成数字1-n的列向量
  15. 【鲲鹏应用迁移】实验:通过鲲鹏开发套件实现Hyper Tuner性能调优(超详细)
  16. 光谱示意图(spectrum)
  17. ⑰霍兰德EI*如何选选专业?高考志愿填报选专业
  18. linux上网本系统下载,上网本操作系统veket linux5.192b正式版下载
  19. 古诗+代码 = 绝配
  20. 建模中常用的30各MATLAB程序和函数

热门文章

  1. 电脑换固态装系统总结
  2. nokia 6300手机QQ4.0下载,设置空间支持jar下载
  3. 淘宝店铺怎么发逛逛?发逛逛有什么要求?
  4. Android用命令行查看手机架构
  5. 李兴华课程 java学习笔记
  6. 从普通程序员到估值上亿的公司老板,他只用了1年!
  7. Eviews中实现ARIMA模型并进行预测
  8. 写数据分析报告,建议部分憋到脸红,咋整?
  9. 【设计模式】-常见面试题汇总
  10. @OnetoOne @OnetoMany @ManyToOne(2)