1.什么是优先队列
优先级最高的先出队。它是队列和排序的完美结合,不仅可以存储数据,还可以将这些数据按照设定的规则进行排序。每次的push和pop操作,优先队列都会动态调整,把优先级最高的元素放在前面。
2.优先队列有关操作
(1) q.top(); //返回具有最高优先级的元素值,但不删除该元素。对应普通队列里的q.front(), 返回队首元素但不删除。
(2) q.pop(); //删除最高优先级元素,即队首元素。
(3) q.push(item); //插入新元素,此元素并非放置在队尾,每次新元素加入队列都会自动按 照设定的规则进行排序,所有item会在自己应在的位置。
3.代码
#include<iostream>
#include<queue>
using namespace std;
priority_queue<int,vector<int>,greater<int> > a;
int main()
{
int n;
int x;
int ans=0;
int t1,t2;
int i,j;
cin>>n;
for (i=1;i<=n;i++)
{
cin>>x;
a.push(x);
}
while (a.size()>=2) //最后一次执行循环是还剩两个元素,执行完队列里还会有一
{ 个元素,可丢掉不管,答案只要ans
t1=a.top(),a.pop();
t2=a.top(),a.pop();
ans+=t1+t2;
a.push(t1+t2); //传入的是t1+t2,而不是ans
}
cout<<ans;
return 0;
}