POJ 3253 哈夫曼树

来源:互联网 发布:圣火明尊战骑进阶数据 编辑:程序博客网 时间:2024/05/28 23:22

题目大意:就是农夫钜木,费用是木板的长度,求最小费用。怎么联想到是哈夫曼树模型呢?关键字:顺序不同,则费用不同,哈夫曼树的特点就是:给定n个叶子节点,可以使得带权路径长度最小。对于本题,怎样使得每块木板在最短的榉木次数下就可以锯出来(关键字:每块木板),这样就是费用最小的情况,那肯定是先钜大块的木,再从大块的木中钜小块。把一个分支看成钜一次木,所以钜一次木就是一个单位长度路径,哈夫曼树的模型就出来了。当然本题中非叶子节点的权值和就是最小费用。

注意的是:题目的过程中的数较大。

 

#include<iostream>#include<queue> using namespace std;int main(){    int n;     __int64 tmp;     cin>>n;  priority_queue<__int64,vector<__int64 >,greater<__int64 > >q;   for(int i=0;i<n;i++ )    {         cin>>tmp;              q.push(tmp);           }    __int64 a,b;    __int64 sum=0;   for(int i=0;i<n-1;i++)   {     a=q.top();     q.pop();     b=q.top();     q.pop();     q.push(a+b);         sum+=(a+b);         }  cout<<sum<<endl; system("pause"); return 0;} 


 

原创粉丝点击