优先队列

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;
}
posted @ 2024-12-17 19:47  屈臣  阅读(26)  评论(0)    收藏  举报