思路:
priority_queue<int> Q; //定义一个优先队列,默认是大顶堆
priority_queue<int,vector<int>,greater<int>> Q;//定义一个小顶堆
Q.push(x); //将x放入队列中
int a = Q.top(); //得到队列顶元素,也就是最小的元素
Q.pop(); // 队列顶元素出队列
实现:
#include <iostream>
#include <queue>
using namespace std;
priority_queue<int,vector<int>,greater<int>> Q;
int main(int argc, char **argv)
{
int n;
while (cin>>n) {
while (Q.empty()==false) {
Q.pop();
}
for (int i=0; i<n; i++) {
int temp;
cin>>temp;
Q.push(temp);
}
int ans=0;
while (Q.size()>1) {
int a = Q.top();
Q.pop();
int b = Q.top();
Q.pop();
ans += a+b;
Q.push(a+b);
}
cout<<ans<<endl;
}
return 0;
}