POJ 3253(Huffman树求最小权值)

来源:互联网 发布:单片机 控制 四轴 编辑:程序博客网 时间:2024/06/07 22:06

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

题意:给出n个木棒长度,从无限长的木棒上锯断n-1次,每次锯断需要花费的代价为木棒的长度,求最小代价。

思路:Huffman树求最小权值的问题,用优先队列可以很方便的解决这道题。

#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>#include<queue>using namespace std;const int INF=0x3f3f3f3f;const int maxn=10010;typedef __int64 LL;LL n,x;int main(){#ifndef ONLINE_JUDGEfreopen("test.in","r",stdin);freopen("test.out","w",stdout);#endifwhile(~scanf("%I64d",&n)){priority_queue<LL,vector<LL>,greater<LL> >q;for(int i=0;i<n;i++){scanf("%I64d",&x);q.push(x);}LL sum=0;if(q.size()==1){//注意特判一下1的情况sum+=q.top();}else{while(q.size()>1){int a=q.top();q.pop();int b=q.top();q.pop();sum+=a+b;q.push(a+b);}}printf("%I64d\n",sum);}return 0;}


0 0
原创粉丝点击