美文网首页
C++优先队列

C++优先队列

作者: _弓长_大人 | 来源:发表于2017-01-15 19:46 被阅读33次

    头文件
    < queue>
    <functional>

    priority_queue<int, vector<int>, greater<int> > q; //从小到大的优先级队列,可将greater改为less,即为从大到小
    q.push() 插入一个元素
    q.pop() 弹出队头元素
    q.top() 队头元素
    q.size() 队列长度

    题意,一个队列每次合并最小的两个数,这两个数的和再次插入队列,重复直到队列只有一个数。

    #include<iostream>
    #include<queue>
    #include<functional>
    using namespace std;
    int n;
    int s[100000];
    int nn;
    int  main()
    {
        cin >> n;
        nn = n;
        int i=0;
        int sum = 0;
        int a;
        int b;
        priority_queue<int, vector<int>, greater<int> > q;
        while (n--)
        {
            cin >> i;
            q.push(i);
        }
        if (nn == 1)
        {
            cout << q.top() << endl;
            return 0;
        }
        while (q.size()>1)
        {
    
            a = q.top();
            q.pop();
            b= q.top();
            q.pop();
                sum += (a+b);
                a += b;
                q.push(a);
        }
        cout << sum << endl;
        return 0;
    }
    

    相关文章

      网友评论

          本文标题:C++优先队列

          本文链接:https://www.haomeiwen.com/subject/agqubttx.html