优先队列
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;
}

浙公网安备 33010602011771号