1360: plank 栅栏修复
题目地址:http://210.43.24.243/problem.php?id=1360
1360: plank
题目描述
农民 John 希望修复围绕农场的一小段围栏。他测量了一下,发现需要 N (1 <= N<= 20,000)根木头,每根都有某一个整数长度 Li (1 <= Li <= 50,000) 单位长度。他买了一根很长的很长的木头,正好能够锯出他所需要的 N 根木头。(即它的长度正好等于 Li 的总和) FJ 忽略锯口,锯掉的木屑产生的长度损失忽略不计,你也可以忽略它。FJ 遗憾的发现他自己没有用于切木头的锯子,所以他就带着那根很长的木头来到了农民Don 的农场,想问他借一个锯子。农民 Don 是一个保守的资本家,他不愿意借锯子给 FJ ,但愿意自己来切这 N-1 刀,每一次都向 FJ 收取费用。每次的收费正好等于你要锯的那根木头的总长度。例如,你要锯一根长度为 21 的木头,就花费 21 分钱。农民 Don 然后让农民 John 自己决定每次锯木头的顺序和位置。帮助农民 John 确定锯出这 N 根木头的最小总花费。 FJ 知道可以有很多种不同的切割方式,不同的方式可能得到不同的总花费,这是因为木头在锯的过程中的长度不一。
输入
* Line 1: 一个整数 N,表示要锯出的木头数
* Lines 2..N+1: 每行一个整数,表示每根木头的长度。
输出
* Line 1: 一个整数,表示他最少需要多少分钱,锯 N-1 下,锯出所有需要的木头。
样例输入
3
8
5
8
样例输出
34
提示
图论-树
来源
图论
哈夫曼树(Huffman tree),又名最优树,指给定n个权值作为n的叶子结点,构造一棵二叉树,若带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman tree)。哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。若将树中结点赋给一个有着某种含义的数值,则这个数值称为该结点的权。
本题目可以转化为Huffman树构造问题:
1.每次找出两块长度最短的木板,然后把它们合并,加入到集合中,
2.在集合中找出两块长度最短的木板,合并,并把合并的长度加入到集合中,重复过程,直到集合中只剩下一个元素
显然,通过每次选取两块长度最短的木板合并,最终必定可以合并出长度为L的木板,并且可以保证总的耗费最少。
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
int main()
{
long long int sum;//sum定义为long long 防止出错
int n;
while(~scanf("%d",&n))
{
int a,b,t;
priority_queue<int,vector<int>,greater<int> >q;
for(int i=0;i<n;i++)
{
int t;
scanf("%d",&t);
q.push(t);
}
sum=0;
if(q.size()==1)
{
sum+= q.top();
q.pop();
}
while(q.size()>1)
{
a=q.top();
q.pop();
b=q.top();
q.pop();
t=a+b;
sum+=t;
q.push(t);//找出两个最小的 合并之后在放入队列中
}
printf("%lld\n",sum);
}
return 0;
}
参考博客:https://blog.csdn.net/zw792346763/article/details/79902082
https://blog.csdn.net/gao_ben_15/article/details/74652652
1360: plank 栅栏修复相关推荐
- 【CTF】CTFHub------历年真题-暴力破解/word文件本质/图片修复/数据包分析一/滴答滴答/栅栏解救/磁盘恢复
文章目录 历年真题 暴力破解 word文件本质 图片修复 好孩子看不见 数据包分析一 滴答滴答 栅栏解救 磁盘恢复 相关知识 CTF中常见的文件头和文件尾 历年真题 暴力破解 1.下载题目附件,发现加 ...
- 洛谷 P2731 骑马修栅栏 Riding the Fences
P2731 骑马修栅栏 Riding the Fences 题目背景 Farmer John每年有很多栅栏要修理.他总是骑着马穿过每一个栅栏并修复它破损的地方. 题目描述 John是一个与其他农民一样 ...
- 骑马修栅栏(信息学奥赛一本通-T1375)
[题目描述] 农民John每年有很多栅栏要修理.他总是骑着马穿过每一个栅栏并修复它破损的地方. John是一个与其他农民一样懒的人.他讨厌骑马,因此从来不两次经过一个一个栅栏.你必须编一个程序,读入栅 ...
- 【codevs2039】骑马修栅栏,欧拉回路
2039 骑马修栅栏 USACO 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 题目描述 Description Farmer John每年有很多栅栏要 ...
- C++11 修复了双重检查锁定问题(转)
从网上看到了一篇这个文章,收藏一下 导读:本文是关于C++11标准中修复了双重检查锁定模式的消息,同时作者阐述了实现双重检查锁定模式的诸多方法,并逐一进行了分析,作者还提供了一个在早期编译器上实现双重 ...
- 微软7月修复117个漏洞,其中9个为0day,2个是Pwn2Own 漏洞
聚焦源代码安全,网罗国内外最新资讯! 编译:奇安信代码卫士 7月14日,微软修复了117个漏洞,包括远程代码执行漏洞.提权漏洞.欺骗漏洞.内存损坏和信息泄露漏洞.其中13个是严重漏洞,9个是0day ...
- 2039 骑马修栅栏
2039 骑马修栅栏 USACO 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description Farmer John每年有很多栅栏要修理. ...
- 一本通1375:骑马修栅栏(fence)
[题目描述] 农民John每年有很多栅栏要修理.他总是骑着马穿过每一个栅栏并修复它破损的地方. John是一个与其他农民一样懒的人.他讨厌骑马,因此从来不两次经过一个一个栅栏.你必须编一个程序,读入栅 ...
- 我的世界服务器拔刀修复,我的世界拔刀剑怎么修复武器攻略分享
我的世界拔刀剑mod是一个十分不错的模组,很多小伙伴都比较喜欢拔刀剑模组中的刀和剑,拔刀剑怎么修复武器呢,很多小伙伴还不知道怎么修复拔刀剑武器吧,今天小编为大家带来的是我的世界拔刀剑武器修复教程,希望 ...
最新文章
- 如何评估机器学习模型的性能
- 解析html文档的java库及范例
- MFC 定时器使用方式
- XAML实例教程系列 - 资源(Resources)
- 运行android程序时显示stop,Android系统.应用程序关闭时WorkManager是否正在运行?
- Spark写入MySQL报错乱码+报错
- 【转】sql语句优化工具LECCO SQL Expert
- C语言之-fPIC编译与代码位置无关.a/.so库(二)
- java反射机制的实现机制_Java反射机制实践
- 【特征提取】基于matlab熵函数语音端点检测【含Matlab源码 1764期】
- wpf分页预览html文件,用WPF实现打印及打印预览
- java宠物商店_Java实现宠物商店管理系统
- 多图预警~ 华为 ECS 与 阿里云 ECS 对比实战
- 计算机考研百天,2021非全日制研究生备考即将进入百天倒计时的你还在坚持吗?...
- html显示当前脚本错误,访问网页总是提示当前网页脚本发生错误怎么办?
- 凸优化理论基础1--仿射集
- Matlab自适应均线_DMA指标(离差移动平均)matlab源代码
- 在Ubuntu 12.10中安装QQ2012
- 人工智能学习——神经网络(matlab+python实现)
- 华为鲲鹏是芯片还是服务器,关于芯片:眼见为实华为鲲鹏架构服务器生态大揭秘...
热门文章
- uniapp+egg.js获取微信步数(wx.getWeRunData)
- 在opencv中如何生成灰度图
- Linux中的vim最小集、指令集及其配置
- vue各类轮播图大全
- 要学计算机买macbook,我是学平面设计的,买苹果电脑需要什么样的配置以上?...
- 动词ing基本用法_动词ing的用法
- 产品经理(22) #运营
- 除了USDT,还能用什么,传说中的“USDT暴雷”是否成真?
- php管理varnish,php实现监控varnish缓存服务器的状态,php监控varnish缓存_PHP教程
- 食谱:微波炉香辣烤翅