codevs 1063 合并果子 优先队列

刚开始没看清题意,以为要按照顺序合并,结果码了DP;后来明白题意后,才知道这道题并不难,运用优先队列水过。

讲一下优先队列:

普通的队列的元素遵循先进先出,后进后出的原则,但在优先队列里,每个元素被赋予优先级,优先级较高的最先出列。定义优先队列时默认为大根堆,即元素越大优先级越高,越先出列

看了别人的博客才知道:优先队列的时间复杂度为O(logn),n为队列中元素的个数,其存取都需要时间。

优先队列用之前需声明:

#include<queue>

using namespace std;

priority_queue <元素类型> 队列名;

五种操作(例如声明了一个这样的优先队列:priority_queue <int> que):

que.push(x) //往队列中添加一个元素x;

que.top() //取出队头元素,但不删除;

que.pop() //删除队头元素;

que.size() //返回队列中元素的个数;

que.empty() //判断队列是否为空,若为空,则为真,反之则反。

P.S. 若要把队列变成“小根堆”,可以push(-x),在元素前加个负号,取出时再把负号去掉。

AC代码:

 1 #include<stdio.h>
 2 #include<string.h>
 3 #include<iostream>
 4 #include<queue>
 5 using namespace std;
 6 priority_queue <int> que;
 7 int n;
 8 long long ans;
 9 int main()
10 {
11     scanf("%d",&n);
12     for(int i=1,x;i<=n;i++){
13         scanf("%d",&x);
14         que.push(-x);
15     }
16     ans=0;
17     for(int i=1;i<n;i++){
18         int tmp=que.top();
19         que.pop();
20         tmp+=que.top();
21         ans-=tmp;
22         que.pop();
23         que.push(tmp);
24     }
25     printf("%lld",ans);
26     return 0;
27 }

优先队列

时间: 2024-10-12 10:54:50

codevs 1063 合并果子 优先队列的相关文章

codevs 1063 合并果子 STL 优先队列

1063 合并果子 Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://codevs.cn/problem/1063/ Description 在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆.多多决定把所有的果子合成一堆. 每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和.可以看出,所有的果子经过n-1次合并之后,就只剩下一堆了.多多在合并果子时总共消耗的体力等于每次合并所耗体力之和.

Codevs 1063 合并果子

时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆.多多决定把所有的果子合成一堆. 每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和.可以看出,所有的果子经过n-1次合并之后,就只剩下一堆了.多多在合并果子时总共消耗的体力等于每次合并所耗体力之和. 因为还要花大力气把这些果子搬回家,所以多多在合并果子时要尽可能地节省体力.

1063 合并果子

1063 合并果子 2004年NOIP全国联赛普及组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 题目描述 Description 在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆.多多决定把所有的果子合成一堆. 每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和.可以看出,所有的果子经过n-1次合并之后,就只剩下一堆了.多多在合并果子时总共消耗的体力等于每次合并所耗体力之和. 因为还要花大力

合并果子(优先队列 +或者+哈夫曼)

合并果子 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 312  Solved: 113[Submit][Status][Web Board] Description 现在有n堆果子,第i堆有ai个果子.现在要把这些果子合并成一堆,每次合并的代价是两堆果子的总果子数.求合并所有果子的最小代价. Input 第一行包含一个整数T(T<=50),表示数据组数.每组数据第一行包含一个整数n(2<=n<=1000),表示果子的堆数.第二行包含n个正

1063 合并果子 2004年NOIP全国联赛普及组

题目描述 Description 在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆.多多决定把所有的果子合成一堆. 每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和.可以看出,所有的果子经过n-1次合并之后,就只剩下一堆了.多多在合并果子时总共消耗的体力等于每次合并所耗体力之和. 因为还要花大力气把这些果子搬回家,所以多多在合并果子时要尽可能地节省体力.假定每个果子重量都为1,并且已知果子的种类数和每种果子的数目,你的任务是设计出合并的次序

【基础练习】【堆】codevs1063 合并果子题解

是的我受不了诸城一中的魔鬼DEVCPP了 还有魔鬼codeblocks 每次编译都要把六个文件都点一遍删除可执行文件再重新编译= =命令行也各种问题 受不了他 直接上题目,不解释直接上代码 1063 合并果子 2004年NOIP全国联赛普及组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆.多多决定把所有的果子合成一堆. 每一次合并,多多可以把

合并果子 (codevs 1063) 题解

[问题描述] 在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆.多多决定把所有的果子合成一堆. 每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和.可以看出,所有的果子经过n-1次合并之后,就只剩下一堆了.多多在合并果子时总共消耗的体力等于每次合并所耗体力之和. 因为还要花大力气把这些果子搬回家,所以多多在合并果子时要尽可能地节省体力.假定每个果子重量都为1,并且已知果子的种类数和每种果子的数目,你的任务是设计出合并的次序方案,使多多耗费的体

【优先队列】合并果子

题目描述 在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆.多多决定把所有的果子合成一堆.     每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和.可以看出,所有的果子经过n-1次合并之后,就只剩下一堆了.多多在合并果子时总共消耗的体力等于每次合并所耗体力之和.     因为还要花大力气把这些果子搬回家,所以多多在合并果子时要尽可能地节省体力.假定每个果子重量都为1,并且已知果子的种类数和每种果子的数目,你的任务是设计出合并的次序方案,使

合并果子

1840: 合并果子 Time Limit: 1 Sec  Memory Limit: 64 MB   64bit IO Format: %lld Description 在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆.多多决定把所有的果子合成一堆. 每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和.可以看出,所有的果子经过n-1次合并之后,就只剩下一堆了.多多在合并果子时总共消耗的体力等于每次合并所耗体力之和. 因为还要花大力气把这些果