POJ 3253 Fence Repair

来源:互联网 发布:centos安装输入法 编辑:程序博客网 时间:2024/05/18 23:29

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

合并N块木板,每次合并木板的代价为两块木板的长度之和。求将N块木板合成1块木板的最小代价。

大水题。。。

哈夫曼编码的思想,优先队列的应用。

注意,数据应该定义为LL型。

#include<cstdio>#include<cstring>#include<cmath>#include<cstdlib>#include<iostream>#include<algorithm>#include<sstream>#include<vector>#include<map>#include<list>#include<set>#include<queue>#define LL long longusing namespace std;const int maxn=1005,maxe=100005,inf=1<<29;int n,m;struct node{    LL x;    bool operator <(const node &a) const    {        return x>a.x;    }};int main(){    while(~scanf("%d",&n))    {        priority_queue<node>q;        for(int i=0;i<n;i++)        {            LL x;            scanf("%lld",&x);            node t={x};            q.push(t);        }        LL ans=0;        while(q.size()>1)        {            node a=q.top();            q.pop();            node b=q.top();            q.pop();            ans+=a.x+b.x;            node t={a.x+b.x};            q.push(t);        }        printf("%I64d\n",ans);    }    return 0;}



0 0