poj 3053 Fence Repair(优先队列)

题目链接http://poj.org/problem?id=3253

思路分析:题目与哈夫曼编码原理相同,使用优先队列与贪心思想;读入数据在优先队列中,弹出两个数计算它们的和,再压入队列中;

 

代码如下: 

#include <iostream>
#include <queue>
using namespace std;

struct cmp
{
    bool operator() (long long a, long long b)
    {
        return a > b;
    }
};

int main()
{
    priority_queue<long long, vector<long long>, cmp> Q;
    long long n, ans = 0;

    cin >> n;
    for (int i = 0; i < n; ++i)
    {
        long long num;

        cin >> num;
        Q.push(num);
    }

    long long a, b;
    while (Q.size() != 1)
    {
        a = Q.top(); Q.pop();
        b = Q.top(); Q.pop();
        ans += a + b;
        Q.push(a + b);
    }

    cout << ans << endl;

    return 0;
}

 

posted @ 2014-11-10 18:31  Leptus  阅读(155)  评论(0编辑  收藏  举报