题干:

一位老木匠需要将一根长的木棒切成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 】聪明的木匠 (贪心,哈夫曼树,时光倒流)相关推荐

  1. 1125 Chain the Ropes (25 分)【难度: 一般 / 贪心 哈夫曼树】

    https://pintia.cn/problem-sets/994805342720868352/problems/994805350316752896 用小根堆即可. #include<bi ...

  2. 【BZOJ4198】荷马史诗,贪心之k叉哈夫曼树

    传送门 思路: 很早以前听说过这个题 据说是一个很强的贪心(?) 然后一上来就往贪心上去想--(其实一开始知道算法不是很好,因为你不会走弯路了) 发现这玩意好像是个合并果子的模型-- 也不知道是怎么转 ...

  3. 每日四题打卡-4.15:耍杂技的牛/贪心绝对值不等式-货仓选址/贪心排序不等式-排队打水/huffman哈夫曼树-合并果子

    耍杂技的牛 具体:https://blog.csdn.net/qq_27262727/article/details/105515507 农民约翰的N头奶牛(编号为1..N)计划逃跑并加入马戏团,为此 ...

  4. 【算法基础26】贪心下——哈夫曼树、排序不等式、绝对值不等式、推公式的思路与应用

    一.合并果子(哈夫曼树) 题目描述:给出n堆不同种类的果子,每堆果子的数量不同,每个果子的重量为1.每次只能合并相邻堆的果子,且花费的体力是果子的重量和.将所有果子合并成一堆,求最小的体力花费. 问题 ...

  5. 赫夫曼编码(基于赫夫曼树的实现)

    上一篇文章中我们探讨了赫夫曼树的基本原理和构造方式,而赫夫曼编码可以很有效地压缩数据(通常可以节约20%-90%的空间,具体压缩率依赖于数据的特性). 名词:定长编码,边长编码,前缀码(装B用的) 定 ...

  6. 数据结构与算法 / 霍夫曼树、霍夫曼编码和解码

    一. 诞生原因 找出存放一串字符所需的最少的二进制编码. 二. 构造方法 首先统计出每种字符出现的频率,即:概率.权值. 例如:频率表 A:60,    B:45,   C:13   D:69   E ...

  7. huffman树_笃学不倦|c语言构造哈夫曼树哈夫曼编码

    艾薇巴蒂!许久不见甚是想念,想必这"涨姿势"的时刻大家已经期待许久了!今天我们要共同学习的是c语言构造哈夫曼树-哈夫曼编码 构造哈夫曼树 首先,我们需要了解哈夫曼树是什么: 相关知 ...

  8. 深入学习二叉树(三) 霍夫曼树

    深入学习二叉树(三) 霍夫曼树 1 前言 霍夫曼树是二叉树的一种特殊形式,又称为最优二叉树,其主要作用在于数据压缩和编码长度的优化. 2 重要概念 2.1 路径和路径长度 在一棵树中,从一个结点往下可 ...

  9. Vijos P1097 合并果子【哈夫曼树+优先队列】

    描述 在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆.多多决定把所有的果子合成一堆. 每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和.可以看 ...

  10. 【数据结构(25)】5.7 哈夫曼树及其应用

    文章目录 前言 一.哈夫曼树的基本概念 1. 哈夫曼树的特点 二.哈夫曼树的构造算法 1. 哈夫曼树的构造过程 2. 哈夫曼算法的实现 2.1 哈夫曼算法思路 2.2 哈夫曼算法实现 三.哈夫曼编码 ...

最新文章

  1. 【Linux】Linux简单操作之安装jdk
  2. 零基础怎么学UI设计
  3. 2017.04.19 有趣的木楔原理图
  4. Xilinx FPGA中SRL(移位寄存器)资源
  5. 细说PHP中strlen和mb_strlen的区别(转)
  6. 3.26日第六次作业,第10章质量,11章人力
  7. 【译】什么导致了Context泄露:Handler内部类
  8. 工程师最重要的能力是什么
  9. 服务器搭建php mysql5_Windows下php5+apache+mysql5 手工搭建笔记
  10. 爬虫练习:爬豆瓣读书的短评
  11. cassandra学习笔记四
  12. 避免eclipse下启动run就进入debug模式
  13. zookeeper集群节点为什么是奇数个
  14. java集群如何同步_Kafka 跨集群同步方案
  15. 高响应比优先调度算法以及其优缺点
  16. 三年硬件工程师薪水_硬件研发工程师,工资不高的真相
  17. wireshark排查网络延迟问题
  18. asp上传头像mysql_asp 会员头像上传 代码
  19. App 测试中 ios 和 Android 有哪些区别
  20. 阿里云大数据ACP(一)大数据开发平台 DataWorks

热门文章

  1. c语言子查询返回子菜单,T-SQL基础(三)之子查询与表表达式
  2. matlab晶闸管整流电路,采用Matlab/Simulink对三相桥式全控整流电路的仿真分析
  3. php中冒号是什么,在PHP中:(双冒号)和-(箭头)有什么区别?
  4. c语言在函数中传递指针,[求助]关于文件指针在函数中传递的问题
  5. 枚举命名规范_UE4 C++基础教程 - 编码规范
  6. 一建机电实务教材电子版_20年一建其实并不难,官方出版:复习题集(精修),速做速提90分...
  7. android 恢复app 到前台,android手机把app disable了,怎么恢复
  8. 在struts2中push方法的使用_【干货】网版印刷中水墨使用注意事项及助剂使用方法...
  9. 冠榕智能灯光控制协议分析(controller-node)
  10. Linux 信号signal处理函数