模板
poj 3253 Fence Repair(哈夫曼树/优先级队列)
题意:将一根长为l的木棍锯成n段
每次锯木棍所需花费等于木棍长度,求最小花费。
题目链接:http://poj.org/problem?id=3253
#include <iostream>
#include <stdio.h>
#include <queue>
#include <algorithm>
using namespace std;
struct node{
int a;
int operator < (node b)const
{return (a>b.a);}
}w;
priority_queue <node> Q;
int main()
{
int n,a,b;
__int64 sum,temp;
while(~scanf("%d",&n)){
sum=0;
while(!Q.empty()){
Q.pop();
}
for(int i=0;i<n;i++){
scanf("%d",&w.a);
Q.push(w);
}
while(Q.size()>1){
a=Q.top().a; Q.pop();
b=Q.top().a; Q.pop();
temp=a+b;
w.a=temp;
Q.push(w);
sum+=temp;
}
printf("%I64d\n",sum);
}
return 0;
}