题目地址: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 栅栏修复相关推荐

  1. 【CTF】CTFHub------历年真题-暴力破解/word文件本质/图片修复/数据包分析一/滴答滴答/栅栏解救/磁盘恢复

    文章目录 历年真题 暴力破解 word文件本质 图片修复 好孩子看不见 数据包分析一 滴答滴答 栅栏解救 磁盘恢复 相关知识 CTF中常见的文件头和文件尾 历年真题 暴力破解 1.下载题目附件,发现加 ...

  2. 洛谷 P2731 骑马修栅栏 Riding the Fences

    P2731 骑马修栅栏 Riding the Fences 题目背景 Farmer John每年有很多栅栏要修理.他总是骑着马穿过每一个栅栏并修复它破损的地方. 题目描述 John是一个与其他农民一样 ...

  3. 骑马修栅栏(信息学奥赛一本通-T1375)

    [题目描述] 农民John每年有很多栅栏要修理.他总是骑着马穿过每一个栅栏并修复它破损的地方. John是一个与其他农民一样懒的人.他讨厌骑马,因此从来不两次经过一个一个栅栏.你必须编一个程序,读入栅 ...

  4. 【codevs2039】骑马修栅栏,欧拉回路

    2039 骑马修栅栏 USACO 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 题目描述 Description Farmer John每年有很多栅栏要 ...

  5. C++11 修复了双重检查锁定问题(转)

    从网上看到了一篇这个文章,收藏一下 导读:本文是关于C++11标准中修复了双重检查锁定模式的消息,同时作者阐述了实现双重检查锁定模式的诸多方法,并逐一进行了分析,作者还提供了一个在早期编译器上实现双重 ...

  6. 微软7月修复117个漏洞,其中9个为0day,2个是Pwn2Own 漏洞

     聚焦源代码安全,网罗国内外最新资讯! 编译:奇安信代码卫士 7月14日,微软修复了117个漏洞,包括远程代码执行漏洞.提权漏洞.欺骗漏洞.内存损坏和信息泄露漏洞.其中13个是严重漏洞,9个是0day ...

  7. 2039 骑马修栅栏

    2039 骑马修栅栏 USACO 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description Farmer John每年有很多栅栏要修理. ...

  8. 一本通1375:骑马修栅栏(fence)

    [题目描述] 农民John每年有很多栅栏要修理.他总是骑着马穿过每一个栅栏并修复它破损的地方. John是一个与其他农民一样懒的人.他讨厌骑马,因此从来不两次经过一个一个栅栏.你必须编一个程序,读入栅 ...

  9. 我的世界服务器拔刀修复,我的世界拔刀剑怎么修复武器攻略分享

    我的世界拔刀剑mod是一个十分不错的模组,很多小伙伴都比较喜欢拔刀剑模组中的刀和剑,拔刀剑怎么修复武器呢,很多小伙伴还不知道怎么修复拔刀剑武器吧,今天小编为大家带来的是我的世界拔刀剑武器修复教程,希望 ...

最新文章

  1. 如何评估机器学习模型的性能
  2. 解析html文档的java库及范例
  3. MFC 定时器使用方式
  4. XAML实例教程系列 - 资源(Resources)
  5. 运行android程序时显示stop,Android系统.应用程序关闭时WorkManager是否正在运行?
  6. Spark写入MySQL报错乱码+报错
  7. 【转】sql语句优化工具LECCO SQL Expert
  8. C语言之-fPIC编译与代码位置无关.a/.so库(二)
  9. java反射机制的实现机制_Java反射机制实践
  10. 【特征提取】基于matlab熵函数语音端点检测【含Matlab源码 1764期】
  11. wpf分页预览html文件,用WPF实现打印及打印预览
  12. java宠物商店_Java实现宠物商店管理系统
  13. 多图预警~ 华为 ECS 与 阿里云 ECS 对比实战
  14. 计算机考研百天,2021非全日制研究生备考即将进入百天倒计时的你还在坚持吗?...
  15. html显示当前脚本错误,访问网页总是提示当前网页脚本发生错误怎么办?
  16. 凸优化理论基础1--仿射集
  17. Matlab自适应均线_DMA指标(离差移动平均)matlab源代码
  18. 在Ubuntu 12.10中安装QQ2012
  19. 人工智能学习——神经网络(matlab+python实现)
  20. 华为鲲鹏是芯片还是服务器,关于芯片:眼见为实华为鲲鹏架构服务器生态大揭秘...

热门文章

  1. uniapp+egg.js获取微信步数(wx.getWeRunData)
  2. 在opencv中如何生成灰度图
  3. Linux中的vim最小集、指令集及其配置
  4. vue各类轮播图大全
  5. 要学计算机买macbook,我是学平面设计的,买苹果电脑需要什么样的配置以上?...
  6. 动词ing基本用法_动词ing的用法
  7. 产品经理(22) #运营
  8. 除了USDT,还能用什么,传说中的“USDT暴雷”是否成真?
  9. php管理varnish,php实现监控varnish缓存服务器的状态,php监控varnish缓存_PHP教程
  10. 食谱:微波炉香辣烤翅