2012年11月8日
摘要: 注意超int.#include<iostream>#include<cstdlib>#include<cstdio>#include<queue>usingnamespacestd;typedefunsignedlongUL;priority_queue<UL,vector<UL>,greater<UL>>q;intn;voidinit(){while(!q.empty())q.pop();}voidsolve(){ULans=0;while(q.size()!=1){ULa=q.top();q.pop();a 阅读全文
posted @ 2012-11-08 20:41 有间博客 阅读(109) 评论(0) 推荐(0) 编辑
摘要: 可以与Hdu 2527 用一样水过,因为这里不需要求编码,但我写这一题主要是为了学习哈弗曼建树,所以也用建树的写了一遍。CODE:#include<iostream>#include<cstdlib>#include<cstdio>#include<queue>usingnamespacestd;#defineMAXN1001priority_queue<int,vector<int>,greater<int>>q;charstr[MAXN];inthuf[MAXN];intlen;voidsolve(){in 阅读全文
posted @ 2012-11-08 16:02 有间博客 阅读(409) 评论(0) 推荐(0) 编辑
摘要: 1. 哈夫曼树的基本概念哈夫曼树又称最优二叉树,是一种带权路径长度最短的二叉树。所谓树的带权路径长度,就是树中所有的叶结点的权值乘上其到根结点的路径长度(若根结点为0层,叶结点到根结点的路径长度为叶结点的层数)。树的带权路径长度记为:WPL=(W1*L1+W2*L2+W3*L3+...+ Wn*Ln)N个权值Wi(i=1,2,...n)构成一棵有N个叶结点的二叉树,相应的叶结点的路径长度为Li(i=1,2,...n)。可以证明哈夫曼树的WPL是最小的。为了直观其见,下图中把带权的叶子结点画成方形,其他非叶子结点仍为圆形。请看下图中的三棵二叉树以及它们的带权路径长:注意:这三棵二叉树叶子结点数相 阅读全文
posted @ 2012-11-08 12:13 有间博客 阅读(4399) 评论(0) 推荐(0) 编辑
摘要: 类似HuffMan编码。CODE:#include<iostream>#include<cstdlib>#include<cstdio>#include<queue>usingnamespacestd;#defineMAXN1001priority_queue<int,vector<int>,greater<int>>q;charstr[MAXN];inthuf[MAXN];intn;voidsolve(){intans=0,a,b;while(q.size()!=1){a=q.top();q.pop();b= 阅读全文
posted @ 2012-11-08 11:58 有间博客 阅读(269) 评论(0) 推荐(0) 编辑