优先队列的使用
windows live writer
终于安装好了windows live writer.(不知道什么问题一直出问题)。简直完美!
试一下的确很爽,先来一道优先队列压压惊!
题目描述
最近,Nova君遇到了一件非常棘手的问题。他需要整理非常多的解题报告。每份解题报告的题目数量是不定的。Nova君每次需要将两份报告的题目解析合成到一份里。假设两份报告的题解数分别为a和b,那么合成这两份报告消耗Nova君a+b的hp值。现在有n份报告,题解数分别为a0,a1,a2,,,an-1,请问Nova最少消耗多少hp?
输入
多组测试数据。每组数据,第一行为一个正整数n(INT范围内),代表报告份数,接下来一行,包含n个正整数(INT范围内)a0,a1,a2,,,an-1,代表每份报告的题解数。
输出
对于每组数据,输出一行,代表Nova需要付出的最少的hp值
输入样例
4
3 5 7 11
输出样例
49
Hint
陈题,然而请用优先队列实现
代码实现:
1 #include <bits/stdc++.h> 2 #define max_size 1000010 3 4 using namespace std; 5 int a[max_size]; 6 7 struct cmp{ 8 bool operator()(int &a,int &b){ 9 return a>b; 10 } 11 }; 12 13 int main(){ 14 priority_queue<int,vector<int>,cmp>q; 15 int n; 16 while(~scanf("%d",&n)){ 17 long long ans=0; 18 int num; 19 for(int i=1;i<=n;i++){ 20 scanf("%d",&num); 21 q.push(num); 22 } 23 int key,a,b; 24 while(!q.empty()){ 25 a=q.top(); 26 q.pop(); 27 if(q.empty())break; 28 b=q.top(); 29 q.pop(); 30 ans+=a+b; 31 key=a+b; 32 q.push(key); 33 } 34 cout<<ans<<endl; 35 } 36 }
作者: 伊甸一点
出处: http://www.cnblogs.com/zpfbuaa/
本文版权归作者伊甸一点所有,欢迎转载和商用(须保留此段声明),且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
原文链接 如有问题, 可邮件(zpflyfe@163.com)咨询.