zoukankan      html  css  js  c++  java
  • poj 3253 Fence Repair(优先队列+huffman树)

         一个很长的英文背景,其他不说了,就是告诉你锯一个长度为多少的木板就要花多少的零钱,把一块足够长(不是无限长)的木板锯成n段,每段长度都告诉你了,让你求最小花费。

        明显的huffman树,优先队列是个很好的东西。

    #include <stdio.h>
    #include <queue>
    #include <algorithm>
    #include <iostream>
    #include <vector>
    #define ll __int64
    using namespace std;
    
    int n;
    struct cmp  //优先级重载
    {
        bool operator()(ll x, ll y)
        {
            return x > y;
        }
    };
    
    priority_queue<ll, vector<ll>, cmp> q;
    
    int main()
    {
        ll x;
        while (scanf("%d", &n) != EOF)
        {
            while (!q.empty()) q.pop();
            ll sum = 0;
            for (int i = 1; i <= n; i++)
            {
                cin >> x;
                sum += x;
                q.push(x);
            }
            ll ans = 0;
          //  while (!q.empty()) {printf("%d ", q.top()); q.pop();}
            while (!q.empty())
            {
                ll a = q.top();
                q.pop();
                ll b = q.top();
                q.pop();
                ans += a+b;
                x = a+b;
                if (!q.empty())
                    q.push(x);
            }
            cout << ans << endl;
        }
        return 0;
    }
    


  • 相关阅读:
    第二次作业
    第一次作业
    第三次作业
    第二次作业
    第一次作业
    第五次作业
    第四次作业
    第三次作业
    第二次作业
    第一次作业
  • 原文地址:https://www.cnblogs.com/xindoo/p/3595003.html
Copyright © 2011-2022 走看看