#include<bits/stdc++.h>
using namespace std;
int main()
{
freopen("in.txt","r",stdin);
int n;cin>>n;
int temp;
priority_queue<int,vector<int>,greater<int> > ppp;
for(int i=0;i<n;i++){
cin>>temp;ppp.push(temp);
}
int total=0;int ans=0;
while(ppp.size()!=1){
int l1=ppp.top();
ppp.pop();
int l2=ppp.top();
ppp.pop();
ans=l1+l2;
ppp.push(ans);
total+=ans;
}
cout<<total;
return 0;
}
priority_queue的使用~
模板原型:
priority_queue<T,Sequence,Compare>
T:存放容器的元素类型
Sequence:实现优先级队列的底层容器,默认是vector<T>
Compare:用于实现优先级的比较函数,默认是functional中的less<T>
常用的操作如下:
empty() | 如果优先队列为空,则返回真 |
pop() | 删除第一个元素 |
push() | 加入一个元素 |
size() | 返回优先队列中拥有的元素的个数 |
top() | 返回优先队列中有最高优先级的元素 |
另外~可以在结构体内部重载 ‘<’,改变小于号的功能(例如把他重载为大于号)
struct student{
int grade;
string name;
//重载运算符,grade 值高的优先级大
friend operator < (student s1,student s2){
return s1.grade < s2.grade;
}
};