https://www.luogu.org/problem/show?pid=1090

题目描述

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

每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和。可以看出,所有的果子经过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。

使用优先队列,很简单。需要注意的是,因为要求搬放重量最小的果子,所以往优先队列里放入果子的重量x时,输入-x。这样重量最小的成为了最优先的。

 1 #include<bits/stdc++.h>
2 using namespace std;
3 priority_queue<int> que;
4 int main()
5 {
6 int n,ans=0;
7 cin>>n;
8 int x;
9 for(int i=0;i<n;i++)
10 {
11 cin>>x;
12 que.push(-x);//放入负数是为了让最小的数在最前,达到优先的效果 (也可以自定义优先级,重载默认的 < 符号)
13 }
14 int tmp;
15 for(int i=1;i<n;i++)
16 {
17 tmp=que.top();
18 ans-=que.top();//减去负值即为正值
19 que.pop();
20 tmp+=que.top();
21 ans-=que.top();
22 que.pop();
23 que.push(tmp);
24 }
25 cout<<ans<<endl;
26 return 0;
27 }

附上优先队列说明:

优先队列是队列的一种,不过它可以按照自定义的一种方式(数据的优先级)来对队列中的数据进行动态的排序

每次的push和pop操作,队列都会动态的调整,以达到我们预期的方式来存储。

例如:我们常用的操作就是对数据排序,优先队列默认的是数据大的优先级高。

所以我们无论按照什么顺序push一堆数,最终在队列里总是top出最大的元素。

标准库默认使用元素类型的<操作符来确定它们之间的优先级关系,当然也可以自定义优先级,重载默认的 < 符号。

如:
struct node
{
friend bool operator< (node n1, node n2)
{
return n1.priority < n2.priority;
}
int priority;
int value;
};

最新文章

  1. Bootstrap框架的学习(二)
  2. sed delete
  3. GMF:如何在不打开Editor的情况下生成图片
  4. Spring4.1.0 整合quartz1.8.2 时 : class not found : org.springframework.scheduling.quartz.JobDetailBean
  5. SmartImageView&amp;常见的开源代码
  6. servlet中Java连接数据库后的基本操作
  7. (转)ubuntu 14.04下安装hadoop2.6(伪分布式)
  8. Machine Learning 学习笔记 (4) —— 广义线性模型
  9. 《ArcGIS Engine+C#实例开发教程》第二讲 菜单的添加及其实现
  10. asp.net Post Get提交数据转Model实例
  11. gulp 初体验
  12. 计算新浪Weibo消息长度
  13. [妙味JS基础]第十二课:数组随机、数组去重
  14. Error:(2, 0) Plugin with id &#39;com.github.dcendents.android-maven&#39; not found. &lt;a href=&quot;openFile:I:\API\PermissionGen-master\permissiongen\build.gradle&quot;&gt;Open File&lt;/a&gt;
  15. 如何在Win10下安装MySQL 5.7绿色版
  16. Android超精准计步器开发-Dylan计步
  17. butterknife使用
  18. Windows 上安装 Redis 及可能出现的错误和解决方法!
  19. LY.JAVA面向对象编程.修饰符
  20. 浅谈 JSONP

热门文章

  1. Pikachu-File Inclusion模块
  2. 在java程序中使用protobuf
  3. 保护亿万数据安全,Spring有“声明式事务”绝招
  4. redis中使用SCAN代替KEYS
  5. java简体(繁体)转换器
  6. 记录一次java项目上线部署
  7. asp.net core 中的路由
  8. tcphdr结构
  9. jQuery中ajax请求的六种方法(三、四):$.getJSON()方法
  10. 剑指offer面试题4