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

题目解释:利用建造哈夫曼树的思想  根据叶节点的权值 排序(升序)(模仿最小堆) 将其所有叶节点的权值入队  当然我们入的是C++中的优先队列(模仿最小堆)

分享C++中 被调用的 优先队列类及其方法

优先队列具有队列的所有特性,包括基本操作,只是在这基础上添加了内部的一个排序,它本质是一个堆实现的

和队列基本操作相同:

top 访问队头元素
empty 队列是否为空
size 返回队列内元素个数
push 插入元素到队尾 (并排序)
emplace 原地构造一个元素并插入队列
pop 弹出队头元素
swap 交换内容
定义:priority_queue<Type, Container, Functional>
Type 就是数据类型,Container 就是容器类型(Container必须是用数组实现的容器,比如vector,deque等等,但不能用 list。STL里面默认用的是vector),Functional 就是比较的方式,当需要用自定义的数据类型时才需要传入这三个参数,使用基本数据类型时,只需要传入数据类型,默认是大顶堆
一般是:

//升序队列
priority_queue <int,vector<int>,greater<int> > q;
//降序队列
priority_queue <int,vector<int>,less<int> >q;

//哈夫曼树
#include<bits/stdc++.h>
using namespace std;
int main(){priority_queue <int,vector<int>,greater<int> > q;//优先队列 中 升序队列int N,i,j,k,a[10000],d[10000],sum=0;scanf("%d",&N);for(i=0;i<N;i++){scanf("%d",&a[i]);}for(i=0;i<N;i++){q.push(a[i]);}while(!q.empty()&&q.size()!=1){int temp1= q.top();//先访问 再弹出 q.pop();int temp2= q.top();q.pop();int temp=temp1+temp2;sum+=temp;q.push(temp);}  printf("%d",sum);
}

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

  1. 7-29 修理牧场 (25 分)

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

  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. 为学Android,我看了这些书
  2. 保证相同类型的MDI子窗体只会被打开一次的方法
  3. dos中特殊符号命令的应用
  4. JavaScript点击事件-一个按钮触发另一个按钮
  5. for in for of区别_Python 第5课:for…in循环黄金搭档之列表
  6. java 取数组的前90位_java 从int数组中获取最大数的方法
  7. 荣耀手表gspro会用鸿蒙,真实使用荣耀手表GS Pro功能用2个月评测反馈!一定看看如何!...
  8. NV21数据的镜像算法
  9. 网站常用组件收集整理
  10. 集线器、交换机与路由器有什么区别?
  11. 如何在html中引入代码,如何在HTML页面引入javaScript代码
  12. 使用hexo发布文章
  13. 两部门:禁止从蒙古国输入猪、野猪及其产品
  14. 中英文说明书丨CalBioreagents ACTH抗原抗体对
  15. 机器学习之概率论与数理统计基础知识-(2)随机变量和数字特征
  16. 时空旅行的可能性(无聊研究社)
  17. 认真学习MySQL中的角色权限控制
  18. 扬帆际海教育:跨境电商需要了解的主流社媒平台
  19. CSU-ACM2017暑假集训比赛1 B - R2D2 and Droid Army
  20. 为网页添加列表和超链接——精美电商悬浮窗

热门文章

  1. 让我们Core在一起:ASP.NET Core amp; .NET Core
  2. C# JObject转换JSON文件相关处理
  3. 【ArcGIS遇上Python】python批量获取栅格数据四至(top,bottom,left,right)坐标代码
  4. 【ArcGIS风暴】数字化实验:数据采集与编辑完整操作流程
  5. C++之inline函数使用总结
  6. Android之SharedPreferences 存储复杂对象
  7. Linux命令常用大全
  8. Android之基于BaseAdapter和SimpleAdapter的GridView
  9. 负基础学python编程_【数据科学系统学习】Python # 编程基础[二]
  10. java黄油刀_一篇文章玩转ButterKnife,让代码更简洁