题目描述

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

每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和。

可以看出,所有的果子经过 n−1 次合并之后, 就只剩下一堆了。

多多在合并果子时总共消耗的体力等于每次合并所耗体力之和。

因为还要花大力气把这些果子搬回家,所以多多在合并果子时要尽可能地节省体力。

假定每个果子重量都为 1 ,并且已知果子的种类 数和每种果子的数目,

你的任务是设计出合并的次序方案,使多多耗费的体力最少,并输出这个最小的体力耗费值。

例如有 3 种果子,数目依次为 1 , 2 , 9 。可以先将 1 、 2 堆合并,新堆数目为 3 ,耗费体力为 3 。

接着,将新堆与原先的第三堆合并,又得到新的堆,数目为 12 ,耗费体力为 12 。

所以多多总共耗费体力 =3+12=15。可以证明 15 为最小的体力耗费值。

输入输出格式

输入格式:

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

第二行包含 n 个整数,用空格分隔,第 i 个整数 ai​(1≤ai​≤20000) 是第 i 种果子的数目。

输出格式:

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

输入输出样例

输入样例#1: 复制

3
1 2 9

输出样例#1: 复制

15

说明

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

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

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

如果看明白了上一篇小根堆的模板

那这个题就是一个很好的应用例子。

用贪心的思路,把堆中小的先合并。

ac代码:

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cmath>
 4 #include<algorithm>
 5 #include<cstring>
 6 #include<queue>
 7 using namespace std;
 8
 9 priority_queue<int,vector<int>,greater<int> > q;
10 long long n,x,ans,a,b;
11
12 int main()
13 {
14     scanf("%d",&n);
15     for(int i=1;i<=n;++i)
16     {
17         scanf("%d",&x);
18         q.push(x);
19     }
20     while(q.size() >=2)
21     {
22         a=q.top() ;
23         q.pop() ;
24         b=q.top() ;
25         q.pop() ;
26         ans+=a+b;
27         q.push(a+b);
28     }
29     printf("%lld",ans);
30     return 0;
31 }


如果你不开心,那我就把右边这个帅傻子分享给你吧,你看,他这么好看,跟个zz一样看着你,你还伤心吗?真的!这照片盯上他五秒钟就想笑了。一切都会过去的。时间时间会给你答案2333

转载于:https://www.cnblogs.com/Mary-Sue/p/9414223.html

P1090 合并果子相关推荐

  1. 洛谷P1090 合并果子

    合并果子 题目链接 这个只能用于结构体中 struct item {int val;friend bool operator < (item a,item b){return a.val > ...

  2. 洛谷——P1090 合并果子

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

  3. P1090 合并果子 / [USACO06NOV] Fence Repair G(贪心+优先队列) 洛谷

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

  4. 合并果子(洛谷-P1090)

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

  5. 贪心算法——洛谷(P1090)[NOIP2004]合并果子

    该题目也属于经典的贪心算法,在这里熟悉C++里优先队列的使用. 需要导入头文件:   #include<queue> 从这个问题可以深挖出神奇的哈夫曼树问题. 因为这题里合并的是二叉树,所 ...

  6. [LUOGU] 1090 合并果子

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

  7. 合并果子(NOIP2004)

    合并果子(NOIP2004) [问题描述] 在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了 不同的堆.多多决定把所有的果子合成一堆.每一次合并,多多可以把两堆果子 合并到一起, ...

  8. SDUT 2127 树-堆结构练习——合并果子之哈夫曼树(优先队列)

    树-堆结构练习--合并果子之哈夫曼树 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Problem Description ...

  9. sdut 2127 树-堆结构练习——合并果子之哈夫曼树 优先队列

    Problem Description 在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆.多多决定把所有的果子合成一堆. 每一次合并,多多可以把两堆果子合并到一起,消耗的 ...

  10. PAT甲级1125 Chain the Ropes:[C++题解]贪心、优先队列、合并果子

    文章目录 题目分析 题目来源 题目分析 来源:acwing 板子题:合并果子合并果子优先队列 分析:贪心策略是: 每次取最短的两条绳子a和b.该两条绳子合并为1条绳子,且长度变为a+b2\frac{a ...

最新文章

  1. Android 常见adb命令
  2. winsock 函数声明大全
  3. Hierarchical Attention Networks for Document Classification(HAN)
  4. 【数学建模】MATLAB应用实战系列(九十一)-熵权法应用案例(附MATLAB和Python代码)
  5. cocos2d基础介绍
  6. Java基础学习总结(61)——Java项目开发要注意的60个问题
  7. Codeforces Educational Codeforces Round 3 D. Gadgets for dollars and pounds 二分,贪心
  8. 测试线程的状态(Java)
  9. SpringBoot + Eureka启动失败
  10. 谜题40:不情愿的构造器
  11. r语言代码html,R语言的R Markdown创建html
  12. MySQL5.7.32 64位解压缩版 windows操作系统安装教程图解
  13. 梶田秀司 仿人机器人学习笔记(一)书本第一章
  14. 用编程Python赚钱的5个方法
  15. VHDL矩阵键盘扫描数码管显示
  16. 各种炫酷的图标按钮在线制作
  17. Mysql对应的dul_Dul基本使用
  18. 双硬盘装linux系统,在我的双硬盘windows电脑上安装ubuntu18.04
  19. 阿里90后运营的工作总结,细致而深刻!
  20. 那些年,我们一起读过的《JAVA与模式》

热门文章

  1. python-gui-pyqt5的使用方法-6--lambda传递参数的方法:
  2. 帆软扩展单元格运算的相关应用
  3. python中strptime函数_python datetime中strptime用法详解
  4. mysql 大写数据库名 无法识别_MySQL数据库名、表名大小写问题
  5. 计算机学院学生会会徽设计,学生会会徽设计策划书
  6. ansys linux运行_如何在linux系统下启动workbench。谢谢啦。 - 仿真模拟 - 小木虫 - 学术 科研 互动社区...
  7. ug侧铣头编程_基于UG建模和仿真的拖拉机箱体零件数控加工研究
  8. 泛型的继承和通配符,同时归纳集合部分的面试点
  9. struts的体系结构
  10. ASP.NET AJAX学习记要(1)-如何下手