洛谷P1090

定义一个从小到大的优先队列

priority_queue<int,vector<int>,greater<int> >q;

每次从队列中去除最小的连个数相加,再将相加后的数放到队列中,使之重新排序

完整代码

#include <bits/stdc++.h>
using namespace std;
priority_queue<int,vector<int>,greater<int> >q;

int main()
{
    int n,m,sum,ans=0;
    cin>>n;
    for(int i=0;i<n;i++)
    {
        cin>>m;
        q.push(m);
    }
    for(int i=n-1;i>0;i--)
    {
        sum=0;
        for(int j=1;j<=2;j++)
        {
            sum+=q.top();
            q.pop();
        }
        ans+=sum;
        q.push(sum);
    }
    cout<<ans<<endl;
    return 0;
}

 

上一篇:C++模板学习之优先队列实现


下一篇:Java Thread.yield详解