7-1 修理牧场 (25 分)(最详解)(最容易理解的解题过程)
7-1 修理牧场 (25 分)(最详解)(最容易理解的解题过程)
农夫要修理牧场的一段栅栏,他测量了栅栏,发现需要N块木头,每块木头长度为整数Li个长度单位,于是他购买了一条很长的、能锯成N块的木头,即该木头的长度是Li的总和。
但是农夫自己没有锯子,请人锯木的酬金跟这段木头的长度成正比。为简单起见,不妨就设酬金等于所锯木头的长度。例如,要将长度为20的木头锯成长度为8、7和5的三段,第一次锯木头花费20,将木头锯成12和8;第二次锯木头花费12,将长度为12的木头锯成7和5,总花费为32。如果第一次将木头锯成15和5,则第二次锯木头花费15,总花费为35(大于32)。
请编写程序帮助农夫计算将木头锯成N块的最少花费。
输入格式:
输入首先给出正整数N(≤104),表示要将木头锯成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 分)(最详解)(最容易理解的解题过程)相关推荐
- 7-29 修理牧场 (25 分)
7-29 修理牧场 (25 分) 农夫要修理牧场的一段栅栏,他测量了栅栏,发现需要N块木头,每块木头长度为整数L i 个长度单位,于是他购买了一条很长的.能锯成N块的木头,即该木头的长度是L ...
- 7-218 修理牧场 (25 分)
7-218 修理牧场 (25 分) 农夫要修理牧场的一段栅栏,他测量了栅栏,发现需要N块木头,每块木头长度为整数Li个长度单位,于是他购买了一条很长的.能锯成N块的木头,即该木头的长度是Li的总和 ...
- 7-5 修理牧场 (25 分)
7-5 修理牧场 (25 分) 农夫要修理牧场的一段栅栏,他测量了栅栏,发现需要N块木头,每块木头长度为整数L i个长度单位,于是他购买了一条很长的.能锯成N块的木头,即该木头的长度是L i的总和. ...
- 7-29 修理牧场 (25分)(PTA实验题)
7-29 修理牧场 (25分) 农夫要修理牧场的一段栅栏,他测量了栅栏,发现需要N块木头,每块木头长度为整数Li 个长度单位,于是他购买了一条很长的.能锯成N块的木头,即该木头的长度是Li ...
- 数据结构PTA习题:基础实验4-2.7 修理牧场 (25分)
基础实验4-2.7 修理牧场 (25分) 农夫要修理牧场的一段栅栏,他测量了栅栏,发现需要N块木头,每块木头长度为整数Li个长度单位,于是他购买了一条很长的.能锯成N块的木头,即该木头的长度是L ...
- 【两种方法】基础实验4-2.7 修理牧场 (25 分)
立志用最少的代码做最高效的表达 农夫要修理牧场的一段栅栏,他测量了栅栏,发现需要N块木头,每块木头长度为整数Li个长度单位,于是他购买了一条很长的.能锯成N块的木头,即该木头的长度是Li的总和. 但 ...
- 7-2 修理牧场 (25 分)
大一下半期数据结构 修理牧场 农夫要修理牧场的一段栅栏,他测量了栅栏,发现需要N块木头,每块木头长度为整数Li个长度单位,于是他购买了一条很长的.能锯成N块的木头,即该木头的长度是Li的总 ...
- python 7-33 修理牧场 (25 分) PTA
农夫要修理牧场的一段栅栏,他测量了栅栏,发现需要N块木头,每块木头长度为整数Li个长度单位,于是他购买了一条很长的.能锯成N块的木头,即该木头的长度是Li的总和. 但是农夫自己没有锯子,请人锯木的 ...
- 7-7 修理牧场 (25分)嗯嗯
农夫要修理牧场的一段栅栏,他测量了栅栏,发现需要N块木头,每块木头长度为整数Li 个长度单位,于是他购买了一条很长的.能锯成N块的木头,即该木头的长度是Li 的总和. 但是农夫自己没有锯子,请 ...
最新文章
- 为学Android,我看了这些书
- 保证相同类型的MDI子窗体只会被打开一次的方法
- dos中特殊符号命令的应用
- JavaScript点击事件-一个按钮触发另一个按钮
- for in for of区别_Python 第5课:for…in循环黄金搭档之列表
- java 取数组的前90位_java 从int数组中获取最大数的方法
- 荣耀手表gspro会用鸿蒙,真实使用荣耀手表GS Pro功能用2个月评测反馈!一定看看如何!...
- NV21数据的镜像算法
- 网站常用组件收集整理
- 集线器、交换机与路由器有什么区别?
- 如何在html中引入代码,如何在HTML页面引入javaScript代码
- 使用hexo发布文章
- 两部门:禁止从蒙古国输入猪、野猪及其产品
- 中英文说明书丨CalBioreagents ACTH抗原抗体对
- 机器学习之概率论与数理统计基础知识-(2)随机变量和数字特征
- 时空旅行的可能性(无聊研究社)
- 认真学习MySQL中的角色权限控制
- 扬帆际海教育:跨境电商需要了解的主流社媒平台
- CSU-ACM2017暑假集训比赛1 B - R2D2 and Droid Army
- 为网页添加列表和超链接——精美电商悬浮窗
热门文章
- 让我们Core在一起:ASP.NET Core amp; .NET Core
- C# JObject转换JSON文件相关处理
- 【ArcGIS遇上Python】python批量获取栅格数据四至(top,bottom,left,right)坐标代码
- 【ArcGIS风暴】数字化实验:数据采集与编辑完整操作流程
- C++之inline函数使用总结
- Android之SharedPreferences 存储复杂对象
- Linux命令常用大全
- Android之基于BaseAdapter和SimpleAdapter的GridView
- 负基础学python编程_【数据科学系统学习】Python # 编程基础[二]
- java黄油刀_一篇文章玩转ButterKnife,让代码更简洁