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. 通过Android重审GET和POST请求
  2. Android的事件分发
  3. 逻辑推理篇:数据分析中违背常理的悖论:辛普森悖论
  4. Intel 64/x86_64/IA-32/x86处理器 - SIMD指令集 - SSE扩展(6) - 逻辑指令 比较指令
  5. 晨哥真有料丨等女神分了我上位!
  6. attodiskbenchmarks(磁盘传输速率检测)_硬盘坏了可以修复吗?电脑硬盘检测?
  7. B站视频下载(含bv快速变回av)
  8. Hibernate各个版本的下载地址
  9. html5 3d gallery,使用jQuery制作3d画廊房间
  10. HealthKit框架参考
  11. Intel CPU平台和架构介绍
  12. NUC980开源项目38-4g上网
  13. z变换判断稳定性和因果性_信号与系统(奥本海姆)
  14. java学习方法和经验
  15. Python之Jacobi迭代计算
  16. (八)Dubbo常见的错误总结
  17. 志愿者服务系统php,志愿者服务系统
  18. 工作多年,我对架构的一些理解
  19. php抓取天眼查,python用xpath采集天眼查内容,有反爬,zip拼数据
  20. QQ跳转浏览器php代码,网址在手机QQ内被点击时自动打开默认浏览器跳转php源码...

热门文章

  1. 大厂技术实现 | 爱奇艺短视频推荐业务中的多目标优化实践 @推荐与计算广告系列
  2. MarkdownPad2注册码——亲测有效
  3. 如何用四条直线把这9个点连起来,要求这四条直线是连续的
  4. 一套实用性最强的商业方案,让他白手起家做到全国十大财阀之一!
  5. 【编程实践】编程语言之 R 语言
  6. CSS 字体粗细 font-weight属性
  7. Linux常用命令学习-base64
  8. 移动硬盘读不出来的问题
  9. 蓝桥杯 印章Java
  10. 【计算机毕业设计】026在线文档管理系统