合并果子(优先队列2种)

这个   第一次学优先队列priority_queue   默认数字大的优先级大   所以果子最小  就是要*-1一下

当然第二种是自定义优先级。(记住格式写法!!)

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<queue>
 4 using namespace std;
 5 priority_queue<int>que;//这样的优先队列 :越小的整数优先级越低的优先队列
 6 int main()
 7 {
 8     int  n,a;
 9     cin>>n;
10     for(i=1;i<=n;i++)
11     {
12         cin>>a;
13         que.push(-a);
14      }
15      for(i=2;i<=n;i++)
16      {
17          a=que.top();//最小的果子
18          que.pop();
19          a+=que.top();//最小的两个合并
20          que.pop();
21          q.push(a);
22          ans+=a;
23      }
24      //全部用负的是因为priority大的优先。
25      cout<<-ans<<endl;
26      return 0;
27  } 

记住:优先队列是用top(),不是front();

 1 #include<cstdio>
 2 #include<iostream>
 3 #include<queue>
 4 using namespace std;
 5 struct cmp
 6 {
 7     bool operator()(const int a,const int b) const
 8     {
 9         return a>b;
10     }
11 };
12 priority_queue<int,vector<int>,cmp>que;
13
14 int n,ans,a,i;
15 int main()
16 {
17     cin>>n;
18     for(i=1;i<=n;i++)
19     {
20         cin>>a;
21         que.push(a);
22      }
23      for(i=2;i<=n;i++)
24      {
25          a=que.top();
26          que.pop();
27          a+=que.top();
28          que.pop();
29          que.push(a);
30          ans+=a;
31      }
32      cout<<ans;
33      return 0;
34 }
时间: 2024-08-03 15:40:32

合并果子(优先队列2种)的相关文章

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

合并果子 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个正

codevs 1063 合并果子 优先队列

刚开始没看清题意,以为要按照顺序合并,结果码了DP:后来明白题意后,才知道这道题并不难,运用优先队列水过. 讲一下优先队列: 普通的队列的元素遵循先进先出,后进后出的原则,但在优先队列里,每个元素被赋予优先级,优先级较高的最先出列.定义优先队列时默认为大根堆,即元素越大优先级越高,越先出列. 看了别人的博客才知道:优先队列的时间复杂度为O(logn),n为队列中元素的个数,其存取都需要时间. 优先队列用之前需声明: #include<queue> using namespace std; pr

codevs 1063 合并果子 STL 优先队列

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

【优先队列】合并果子

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

合并果子

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

【NOIP合并果子】uva 10954 add all【贪心】——yhx

Yup!! The problem name reects your task; just add a set of numbers. But you may feel yourselvescondescended, to write a C/C++ program just to add a set of numbers. Such a problem will simplyquestion your erudition. So, lets add some avor of ingenuity

合并果子问题浅析

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

NOIP提高组2004 合并果子题解

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

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

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

Codevs 1063 合并果子

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