UVa 10954 - Add All

题目链接:UVa 10954 - Add All

哈夫曼树的思想。

本来想写个链表,写了一点感觉不太熟练了。。虽然是上学期刚学的。那就用优先队列吧,反正数据结构过段时间考研也得再复习。

优先队列是个好东西啊,贪心的题目总用,具体讲解看上一篇文章。STL中优先队列的使用

#include <iostream>
#include <queue>
#include <vector>

using namespace std;

struct cmp
{
    bool operator () (int x,int y)
    {
        return x > y;//小的优先级高
    }
};
priority_queue<int,vector<int>,cmp> q;
int N;
int num,sum,_sum;
int main()
{
    while(cin>>N,N)
    {
        _sum = 0;
        for(int i = 0;i < N;i++)
        {
            cin>>num;
            q.push(num);
        }
        while(true)
        {
            int a = q.top();
            q.pop();
            int b = q.top();
            q.pop();
            sum = (a + b);
            _sum += sum;
            if(q.empty())
                break;
            q.push(sum);
        }
        cout<<_sum<<endl;

    }
    return 0;
}


你可能感兴趣的:(UVa 10954 - Add All)