HuffmanFence Repair(POJ 3253)

Posted 路人姜。

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HuffmanFence Repair(POJ 3253)相关的知识,希望对你有一定的参考价值。

题目大意:

农夫约翰为了修理栅栏,要将一块很长的木板切割成N块。准备切成的木板的长度为L1、L2、Ln,未切割前木板的长度恰好为切割后木板长度的总和。每次切断木板时,需要的开销为这块木板的长度。举个栗子,长21的木板切成5、8、8三块木板,21切成13和8时,开销为21;13切成5和8时开销13,所以合计开销是34。求将木板切割完最小的开销是多少。

输入:

3

8

5

8

输出:

34

分析:

开销是由两个木板加起来的长度决定的,所以应每次取最小和次小的木板相加才能让总开销最小,因此想到Huffman,用priority_queue将最小和次小的pop,将他们的和push,直到队列的大小为1。

程序代码:

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

int main()
{
    int N;
    int t;
    int ans=0;
    priority_queue<int,vector<int>,greater<int> >q;
    cin>>N;
    for(int i=0;i<N;i++){
        cin>>t;
        q.push(t);
    }
     while(q.size()!=1){
        t=0;
        t+=q.top();
        q.pop();
        t+=q.top();
        q.pop();
        ans+=t;
        q.push(t);
     }
     cout<<ans<<endl;
    return 0;
}

 

以上是关于HuffmanFence Repair(POJ 3253)的主要内容,如果未能解决你的问题,请参考以下文章

POJ-3253 Fence Repair---Huffman贪心

POJ 3253 Fence Repair

Fence Repair(poj3253)

poj 3691 DNA repair

POJ 3253 Fence Repair

[POJ3253] Fence Repair