7-29 修理牧场 (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 <bits/stdc++.h>
using namespace std;
int main()
{int i,n,m,a,b,s=0;cin>>n;priority_queue <int,vector<int>, greater<int> >q;for(i=1;i<=n;i++){scanf("%d",&m);q.push(m);}while(q.size()!=1){a=q.top();q.pop();b=q.top();q.pop();s+=a+b;                //每次取最小两块的和 q.push(a+b);           //每次再最小两块合成一块,推回队列 }cout<<s<<endl;
}

7-29 修理牧场 (25 分)相关推荐

  1. 7-1 修理牧场 (25 分)(最详解)(最容易理解的解题过程)

    7-1 修理牧场 (25 分)(最详解)(最容易理解的解题过程) 农夫要修理牧场的一段栅栏,他测量了栅栏,发现需要N块木头,每块木头长度为整数L​i​​个长度单位,于是他购买了一条很长的.能锯成N块的 ...

  2. 7-218 修理牧场 (25 分)

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

  3. 7-5 修理牧场 (25 分)

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

  4. 7-29 修理牧场 (25分)(PTA实验题)

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

  5. 数据结构PTA习题:基础实验4-2.7 修理牧场 (25分)

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

  6. 【两种方法】基础实验4-2.7 修理牧场 (25 分)

    立志用最少的代码做最高效的表达 农夫要修理牧场的一段栅栏,他测量了栅栏,发现需要N块木头,每块木头长度为整数L​i个长度单位,于是他购买了一条很长的.能锯成N块的木头,即该木头的长度是Li的总和. 但 ...

  7. 7-2 修理牧场 (25 分)

    大一下半期数据结构 修理牧场 农夫要修理牧场的一段栅栏,他测量了栅栏,发现需要N块木头,每块木头长度为整数L​i​​个长度单位,于是他购买了一条很长的.能锯成N块的木头,即该木头的长度是L​i​​的总 ...

  8. python 7-33 修理牧场 (25 分) PTA

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

  9. 7-7 修理牧场 (25分)嗯嗯

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

最新文章

  1. python给生活带来哪些改变_你们觉得python简单么?真的能给生活带来更多机遇么?或者说某些改变?...
  2. js控制页面刷新大全
  3. 新手学习Java必需要知道的这些基本概念!
  4. Servlet之javaweb应用(二)
  5. 深入了解Java 8日期和时间API
  6. java学习(61):适配器
  7. 消息队列RabbitMQ入门与5种模式详解
  8. 基于Fabric的性能测试与调优实践
  9. How to increase sales, in addition to manufacturing different phones
  10. Tomcat下使用Log4j 接管 catalina.out 日志文件生成方式
  11. enumerable java_ruby中的Enumerable的使用
  12. 一线互联网企业负载均衡和应用优化基础
  13. javascript自定义滚动条插件,几行代码的事儿
  14. C语言例题-打印日历
  15. 毕设/私活/必备,一个挣钱的标准开源前后端分离【springboot+vue+redis+Spring Security】脚手架--若依框架
  16. everything用于移动硬盘资料管理(一):离线搜索
  17. 仿羊了个羊H5游戏源码
  18. 2.OSGI企业应用开发-Eclipse中搭建Felix运行环境
  19. 电子商务站点资源收集~~~
  20. Lol(英雄联盟)自动输入密码

热门文章

  1. TensorFlow tf.nn.conv2d是怎样实现卷积的?
  2. python 矩阵常用计算
  3. 【Python排序搜索基本算法】之拓扑排序
  4. Imagemagick常用指令
  5. EXSI中Linux安装tools
  6. HuaWei设置镜像端口和观察端口
  7. Cissp-【第3章 安全工程】-2021-1-31(205页-237页)
  8. post xmlrpc.php,宝塔面板WordPress /xmlrpc.php经常被post恶意数据
  9. mos管开关电路_MOS管的知识,看这一篇就可以了
  10. 深入理解Java注解Annotation及自定义注解