【51Nod - 1117 】聪明的木匠 (贪心,哈夫曼树,时光倒流)
题干:
一位老木匠需要将一根长的木棒切成N段。每段的长度分别为L1,L2,......,LN(1 <= L1,L2,…,LN <= 1000,且均为整数)个长度单位。我们认为切割时仅在整数点处切且没有木材损失。
木匠发现,每一次切割花费的体力与该木棒的长度成正比,不妨设切割长度为1的木棒花费1单位体力。例如:若N=3,L1 = 3,L2 = 4,L3 = 5,则木棒原长为12,木匠可以有多种切法,如:先将12切成3+9.,花费12体力,再将9切成4+5,花费9体力,一共花费21体力;还可以先将12切成4+8,花费12体力,再将8切成3+5,花费8体力,一共花费20体力。显然,后者比前者更省体力。
那么,木匠至少要花费多少体力才能完成切割任务呢?
Input
第1行:1个整数N(2 <= N <= 50000)
第2 - N + 1行:每行1个整数Li(1 <= Li <= 1000)。
Output
输出最小的体力消耗。
Sample Input
3 3 4 5
Sample Output
19
解题报告:
最优合并问题,夏季学期实践课的时候做过一个类似的Fence的一个(切栅栏好像是,还是切木板来着)。需要注意的问题也都在我的那篇博客上有写。
AC代码:
#include <bits/stdc++.h>
#define ll long long
using namespace std;
ll n,tmp,ans,tmpp;
priority_queue<ll,vector<ll>,greater<ll> > pq;
int main()
{cin>>n;for(int i = 1; i<=n; i++) scanf("%lld",&tmp),pq.push(tmp); for(int i = 1; i<n; i++) {tmp = pq.top();pq.pop();tmpp = pq.top(); pq.pop();ans += tmp + tmpp;pq.push(tmp + tmpp);}printf("%lld\n",ans);return 0;
}
【51Nod - 1117 】聪明的木匠 (贪心,哈夫曼树,时光倒流)相关推荐
- 1125 Chain the Ropes (25 分)【难度: 一般 / 贪心 哈夫曼树】
https://pintia.cn/problem-sets/994805342720868352/problems/994805350316752896 用小根堆即可. #include<bi ...
- 【BZOJ4198】荷马史诗,贪心之k叉哈夫曼树
传送门 思路: 很早以前听说过这个题 据说是一个很强的贪心(?) 然后一上来就往贪心上去想--(其实一开始知道算法不是很好,因为你不会走弯路了) 发现这玩意好像是个合并果子的模型-- 也不知道是怎么转 ...
- 每日四题打卡-4.15:耍杂技的牛/贪心绝对值不等式-货仓选址/贪心排序不等式-排队打水/huffman哈夫曼树-合并果子
耍杂技的牛 具体:https://blog.csdn.net/qq_27262727/article/details/105515507 农民约翰的N头奶牛(编号为1..N)计划逃跑并加入马戏团,为此 ...
- 【算法基础26】贪心下——哈夫曼树、排序不等式、绝对值不等式、推公式的思路与应用
一.合并果子(哈夫曼树) 题目描述:给出n堆不同种类的果子,每堆果子的数量不同,每个果子的重量为1.每次只能合并相邻堆的果子,且花费的体力是果子的重量和.将所有果子合并成一堆,求最小的体力花费. 问题 ...
- 赫夫曼编码(基于赫夫曼树的实现)
上一篇文章中我们探讨了赫夫曼树的基本原理和构造方式,而赫夫曼编码可以很有效地压缩数据(通常可以节约20%-90%的空间,具体压缩率依赖于数据的特性). 名词:定长编码,边长编码,前缀码(装B用的) 定 ...
- 数据结构与算法 / 霍夫曼树、霍夫曼编码和解码
一. 诞生原因 找出存放一串字符所需的最少的二进制编码. 二. 构造方法 首先统计出每种字符出现的频率,即:概率.权值. 例如:频率表 A:60, B:45, C:13 D:69 E ...
- huffman树_笃学不倦|c语言构造哈夫曼树哈夫曼编码
艾薇巴蒂!许久不见甚是想念,想必这"涨姿势"的时刻大家已经期待许久了!今天我们要共同学习的是c语言构造哈夫曼树-哈夫曼编码 构造哈夫曼树 首先,我们需要了解哈夫曼树是什么: 相关知 ...
- 深入学习二叉树(三) 霍夫曼树
深入学习二叉树(三) 霍夫曼树 1 前言 霍夫曼树是二叉树的一种特殊形式,又称为最优二叉树,其主要作用在于数据压缩和编码长度的优化. 2 重要概念 2.1 路径和路径长度 在一棵树中,从一个结点往下可 ...
- Vijos P1097 合并果子【哈夫曼树+优先队列】
描述 在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆.多多决定把所有的果子合成一堆. 每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和.可以看 ...
- 【数据结构(25)】5.7 哈夫曼树及其应用
文章目录 前言 一.哈夫曼树的基本概念 1. 哈夫曼树的特点 二.哈夫曼树的构造算法 1. 哈夫曼树的构造过程 2. 哈夫曼算法的实现 2.1 哈夫曼算法思路 2.2 哈夫曼算法实现 三.哈夫曼编码 ...
最新文章
- 【Linux】Linux简单操作之安装jdk
- 零基础怎么学UI设计
- 2017.04.19 有趣的木楔原理图
- Xilinx FPGA中SRL(移位寄存器)资源
- 细说PHP中strlen和mb_strlen的区别(转)
- 3.26日第六次作业,第10章质量,11章人力
- 【译】什么导致了Context泄露:Handler内部类
- 工程师最重要的能力是什么
- 服务器搭建php mysql5_Windows下php5+apache+mysql5 手工搭建笔记
- 爬虫练习:爬豆瓣读书的短评
- cassandra学习笔记四
- 避免eclipse下启动run就进入debug模式
- zookeeper集群节点为什么是奇数个
- java集群如何同步_Kafka 跨集群同步方案
- 高响应比优先调度算法以及其优缺点
- 三年硬件工程师薪水_硬件研发工程师,工资不高的真相
- wireshark排查网络延迟问题
- asp上传头像mysql_asp 会员头像上传 代码
- App 测试中 ios 和 Android 有哪些区别
- 阿里云大数据ACP(一)大数据开发平台 DataWorks
热门文章
- c语言子查询返回子菜单,T-SQL基础(三)之子查询与表表达式
- matlab晶闸管整流电路,采用Matlab/Simulink对三相桥式全控整流电路的仿真分析
- php中冒号是什么,在PHP中:(双冒号)和-(箭头)有什么区别?
- c语言在函数中传递指针,[求助]关于文件指针在函数中传递的问题
- 枚举命名规范_UE4 C++基础教程 - 编码规范
- 一建机电实务教材电子版_20年一建其实并不难,官方出版:复习题集(精修),速做速提90分...
- android 恢复app 到前台,android手机把app disable了,怎么恢复
- 在struts2中push方法的使用_【干货】网版印刷中水墨使用注意事项及助剂使用方法...
- 冠榕智能灯光控制协议分析(controller-node)
- Linux 信号signal处理函数