合并果子(经典优先队列)

https://www.luogu.com.cn/problem/P1090

题目描述

在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆。多多决定把所有的果子合成一堆。

每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和。可以看出,所有的果子经过 n−1次合并之后, 就只剩下一堆了。多多在合并果子时总共消耗的体力等于每次合并所耗体力之和。

因为还要花大力气把这些果子搬回家,所以多多在合并果子时要尽可能地节省体力。假定每个果子重量都为 1 ,并且已知果子的种类 数和每种果子的数目,你的任务是设计出合并的次序方案,使多多耗费的体力最少,并输出这个最小的体力耗费值。

例如有 3种果子,数目依次为 1, 2, 9 。可以先将 1 、 2堆合并,新堆数目为 3 ,耗费体力为 3 。接着,将新堆与原先的第三堆合并,又得到新的堆,数目为 12 ,耗费体力为 12 。所以多多总共耗费体力 =3+12=15 。可以证明 15 为最小的体力耗费值。

输入格式

共两行。

第一行是一个整数 n(1≤n≤10000),表示果子的种类数。

第二行包含 n个整数,用空格分隔,第 i个整数 a i a_iai​是第 i种果子的数目。

输出格式

一个整数,也就是最小的体力耗费值。输入数据保证这个值小于 2 32 2^{32}232

输入输出样例

输入 #1

3

1 2 9

输出 #1

15

说明/提示

对于30%的数据,保证有n≤1000:

对于50%的数据,保证有n≤5000;

对于全部的数据,保证有n≤10000。

题解

类似于最优二叉树,不断地将最小的和最小的相融合。

这时候用优先队列就很方便,每一次队头都是最小的,第二个就是第二小的,

每一次取出开头两个数,相加再塞入队列里

然后直到合成一堆。

#include

using namespace std;

priority_queue,greater >q;//小顶堆,升序队列

int main()

{

int n,temp1,temp2,t=0;

cin>>n;

int a[n+5];

for(int i=1;i<=n;i++)

{

cin>>a[i];

q.push(a[i]);

}

int k=1;

while(k

{

temp1=q.top();

q.pop();

temp2=q.top();

q.pop();

q.push(temp1+temp2);

t=t+temp1+temp2;

k++;

}

cout<

return 0;

}

java合并果子_合并果子(经典优先队列)相关推荐

  1. 代码合并工具_合并上千个Excel表格,1秒就能完成

    在公众号对话框发送关键词[CSV],就能收到小 E 送出的批量转换 CSV 格式的小工具了! 小 E 和你打一个赌,95%的职场人都会遇到这样一个场景,很多 Excel 工作簿需要汇总合并成一个文档! ...

  2. sql server合并行_合并SQL Server复制参数化的行筛选器问题

    sql server合并行 In this article we will discuss about SQL Server Merge Replication Parameterized row f ...

  3. arcgis 合并 联合_合并不同图层中的要素(联合)

    "联合"用于将所选要素合并为一个新要素.所选要素可以来自不同图层,但图层的几何类型(线或面)必须相同."联合"会保留原始要素及其属性 - 也就是说,在" ...

  4. 有关java的名句_志气的经典名言名句(精选50句)

    志气的经典名言名句(精选50句) 三军可夺帅也,匹夫不可夺志也.下面是小编收集的志气的经典名言名句(精选50句),欢迎阅读! 1.路曼曼其修远兮,吾将上下而求索.--屈原<离骚> 2.会当 ...

  5. java恐怖游戏_分享个经典恐怖游戏系列

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 10.隔离区: 这间房子大体构造是,上半部分有4间小屋,从左至右编号为1.2.3.4:下部左边有两间大屋,编号5和6,右半部分通往出口.下面说一下过关流程 ...

  6. python链表合并去重_合并两个链表并去重(php实现)

    这个也是某公司面试题,自己没做出来,原因有几点: 自己学的不扎实,眼高手低 面试官要我在白板上写出程序,必须得php写,思路不行,写的时候感觉白板有点小 写的过程中发现实现还是会需要一些步骤的,而且感 ...

  7. arcgis 合并 联合_合并 (数据管理)

    Merge 示例 2(独立脚本) 使用 Merge 功能可将两个街区要素类中的要素移动到一个单独的数据集中. # Name: Merge.py # Description: Use Merge to ...

  8. [剑指offer][JAVA]面试题[第23题][合并K个排序链表][分治][优先队列]

    [问题描述]23.合并K个排序链表 合并 k 个排序链表,返回合并后的排序链表.请分析和描述算法的复杂度. 示例: 输入: [1->4->5,1->3->4,2->6 ] ...

  9. java怎么做沙子合并_dp之沙子合并 环形沙子合并 沙子合并加强 沙子三兄弟的故事...

    沙子合并加强 沙子合并问题 问题描述:设有N堆沙子排成一排,其编号为1,2,3,-,N(N<=2000).每堆沙子有一定的数量,可以用一个整数来描述,现在要将这N堆沙子合并成为一堆,每次只能合并 ...

  10. java 两个stream合并_Java Stream 流如何进行合并操作

    1. 前言 Java Stream Api 提供了很多有用的 Api 让我们很方便将集合或者多个同类型的元素转换为流进行操作.今天我们来看看如何合并 Stream 流. 2. Stream 流的合并 ...

最新文章

  1. Go 学习笔记(59)— Go 第三方库之 etcd/clientv3 封装为方法使用(建立连接、设置key-value、获取key-value、获取带前缀的key-value)
  2. 把一些11年老博客上的文章转移过来了
  3. Highcharts Pie 饼图提示标签IE下重叠解决方法,及json数据绑定方法
  4. python学生管理系统-学生管理系统python
  5. 三刷进博 | 跨界直播,组团参展,施耐德电气有备而来!
  6. php使用aot,aot的常规使用
  7. 感受学生考勤“智慧化”变革 签到荚让校园更智慧
  8. sh: react-scripts: command not found after running npm start
  9. php小白书,php小白的自学第一天
  10. Highcharts数据可视化工具功能效果图详解
  11. Redis 低成本、高可用设计,牛逼!
  12. PHP 将二维数组转成一维数组
  13. java 库知乎_基于原生Java API爬取最新版本知乎百万用户数据
  14. 计算机类学术期刊SCI/EI期刊核心期刊有哪些?
  15. 墨者Apache Struts2远程代码执行漏洞(S2-009)复现题解
  16. 2020进博会霍尼韦尔特性材料和技术集团与七家企业签约项目
  17. luogu P5286 [HNOI2019]鱼
  18. 使用CIFAR10数据集完成知识蒸馏(参照了快乐就好_Peng博主的博客)致谢
  19. 使用useState因异步导致数据不能及时更新的问题
  20. 易语言5.7完美版 全套视频学习教程

热门文章

  1. 文本乱码怎么办?教你一招批量修改文本文件的编码格式,轻松解决乱码问题
  2. 饭饭科普47 — 什么是区块链
  3. 卷不能在读/写模式下重新挂载。可能是因为先前没有完全卸载(安全删除)
  4. Redis HyperLogLog 是什么?这些场景使用它,让我枪出如龙,一笑破苍穹
  5. CSS 深入理解absolute
  6. 小米官网首页简单实现及分析
  7. 计算机科学中的哲学思想,冯_诺依曼的计算机科学哲学思想.doc
  8. 泛微oa流程表单之流程阻止提交
  9. wx.getImageInfo(Object object)获取图片信息
  10. 产品和运营区别是什么,别迷惑了。