合并果子(贪心+优先队列)
2016-01-23 16:02
417 查看
C -合并果子
Crawling in process...Crawling failedTime
Limit:1000MS Memory Limit:131072KB64bit IO Format:%lld & %llu
SubmitStatus
Description
现在有n堆果子,第i堆有ai个果子。现在要把这些果子合并成一堆,每次合并的代价是两堆果子的总果子数。求合并所有果子的最小代价。
Input
第一行包含一个整数T(T<=50),表示数据组数。
每组数据第一行包含一个整数n(2<=n<=1000),表示果子的堆数。
第二行包含n个正整数ai(ai<=100),表示每堆果子的果子数。
Output
每组数据仅一行,表示最小合并代价。
Sample Input
Sample Output
Hint
优先队列的应用,实际上就是相当于一种哈夫曼算法,每次取最小的两堆进行合并,将合并后的那堆同样放入其中进行大小比较。关于优先队列,可以参考http://blog.csdn.net/qq_30076791/article/details/50569241
第一次使用优先队列做题,其中有两点需要注意:
Crawling in process...Crawling failedTime
Limit:1000MS Memory Limit:131072KB64bit IO Format:%lld & %llu
SubmitStatus
Description
现在有n堆果子,第i堆有ai个果子。现在要把这些果子合并成一堆,每次合并的代价是两堆果子的总果子数。求合并所有果子的最小代价。
Input
第一行包含一个整数T(T<=50),表示数据组数。
每组数据第一行包含一个整数n(2<=n<=1000),表示果子的堆数。
第二行包含n个正整数ai(ai<=100),表示每堆果子的果子数。
Output
每组数据仅一行,表示最小合并代价。
Sample Input
2 4 1 2 3 4 5 3 5 2 1 4
Sample Output
19 33
Hint
优先队列的应用,实际上就是相当于一种哈夫曼算法,每次取最小的两堆进行合并,将合并后的那堆同样放入其中进行大小比较。关于优先队列,可以参考http://blog.csdn.net/qq_30076791/article/details/50569241
#include<stdio.h> #include<queue> #include<functional> using namespace std; int main() { int t,n,a; scanf("%d",&t); while(t--) { priority_queue<int,vector<int>,greater<int> >q; scanf("%d",&n); for(int i=0; i<n; i++) { scanf("%d",&a); q.push(a); } int ans=0,tmp; while(q.size()>=2) { tmp=0; tmp+=q.top(); q.pop(); tmp+=q.top(); q.pop(); ans+=tmp; q.push(tmp); } printf("%d\n",ans); } return 0; }
第一次使用优先队列做题,其中有两点需要注意:
【1】priority_queue<int,vector<int>,greater<int> >q;中的最后两个>>中间要有一个空格;
<span style="font-family: Arial, Helvetica, sans-serif; font-size: 12px;">【2】取队列中的元素是q.top(),而不是q.front()。</span>
相关文章推荐
- C#数据结构之顺序表(SeqList)实例详解
- Lua教程(七):数据结构详解
- 解析从源码分析常见的基于Array的数据结构动态扩容机制的详解
- C#数据结构之队列(Quene)实例详解
- C#数据结构揭秘一
- C#数据结构之单链表(LinkList)实例详解
- 数据结构之Treap详解
- C#数据结构之堆栈(Stack)实例详解
- C#数据结构之双向链表(DbLinkList)实例详解
- JavaScript数据结构和算法之图和图算法
- Java数据结构及算法实例:冒泡排序 Bubble Sort
- Java数据结构及算法实例:插入排序 Insertion Sort
- Java数据结构及算法实例:考拉兹猜想 Collatz Conjecture
- java数据结构之java实现栈
- java数据结构之实现双向链表的示例
- Java数据结构及算法实例:选择排序 Selection Sort
- Java数据结构及算法实例:朴素字符匹配 Brute Force
- Java数据结构及算法实例:汉诺塔问题 Hanoi
- Java数据结构及算法实例:快速计算二进制数中1的个数(Fast Bit Counting)
- java数据结构和算法学习之汉诺塔示例