P1090 [NOIP2004 提高组] 合并果子 / [USACO06NOV] Fence Repair G
以此题为例,进行优先队列的基本使用
AC代码
//优先队列
#include <bits/stdc++.h>
using namespace std;
int n,x,ans;
priority_queue<int,vector<int>,greater<int>>m;
//优先队列的创建,并且数字从小到大排序,如果要从大到小排序,greater换成less
int main()
{cin>>n;for(int i=0;i<n;i++){cin>>x;m.push(x);//添加元素}while(m.size()>=2)//计算优先队列的元素个数{int a=m.top();//取优先级最大的数,但不删除m.pop();//删除优先级最高的元素int b=m.top();m.pop();ans+=(a+b);m.push(a+b);
//因为每次添加合成之后的元素,优先队列都会自动排序,所以减少了不少代码量}cout<<ans;return 0;
}