SDUTOJ 2848 Fence Repair

来源:互联网 发布:软件加人规则 编辑:程序博客网 时间:2024/06/05 20:10

SDUTOJ   2848   Fence Repair

题目链接:http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2848

题目大意:有n块木头,长度分别给出,要把这些木头修成栅栏,每次挑出两块连成一截,并花费这两块木头长度的钱。最终要把所有木块合成一条栅栏,问最少花费多少钱。

题目分析:哈夫曼树经典例题。

code:

#include<cstdio>#include<queue>using namespace std;struct cmp{    bool operator ()(int &a,int &b)    {        return a>b;//最小值优先    }};int main(){    int i,m,n,t;    long long count;    while(scanf("%d",&n)!=EOF)    {        priority_queue<int,vector<int>,cmp>q;        for(count=i=0;i<n;i++)        {            scanf("%d",&m);            q.push(m);        }        while(!q.empty())        {            m=q.top();            q.pop();            if(q.empty())break;            m+=q.top();            q.pop();            q.push(m);            count+=m;        }        printf("%lld\n",count);    }    return 0;}

PS:O了






0 0
原创粉丝点击