題意:根據哈夫曼編碼原則壓縮乙個字串,問壓縮後的大小和壓縮比。
思路:就是寫一棵哈夫曼樹。
ps:第一次寫哈夫曼樹,寫得好醜
/*********************************************
problem : hdu 1053
author : nmfloat
********************************************/
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define rep(i,a,b) for(int i = (a) ; i <= (b) ; i ++)
#define rrep(i,a,b) for(int i = (b) ; i >= (a) ; i --)
#define repe(p,u) for(edge * p = g[u].first ; p ; p = p -> next)
#define cls(a,x) memset(a,x,sizeof(a))
#define eps 1e-8
using
namespace
std;
const
int mod = 1e9+7;
const
int inf = 0x3f3f3f3f;
const
int maxn = 1e5+5;
const
int maxe = 2e5+5;
typedef
long
long ll;
typedef
unsigned
long
long ull;
int t,n,m,k;
int fx = ;
int fy = ;
char s[100005];
int a[30];
int tot = 0;
struct leaf t[1000];
struct node
bool
operator
< (const node b) const
};priority_queuep;
int ans ;
void dfs(int u,int depth)
dfs(t[u].x,depth+1);
dfs(t[u].y,depth+1);
}void huffman()
}if(a[26])
//puts("");
if(p.size() == 1)
while(p.size() != 1)
ans = 0;
dfs(tot-1,0);
}void input()
void solve()
tot = 1;
huffman();
printf("%d %d %.1lf\n",len*8,ans,(double)(len*8)/(double)ans);
}int main(void)
return
0;}
HDU1053 Entropy 哈夫曼樹
認真讀題,別怕題長,此題考查的就是哈夫曼樹並求出最小編碼值,注意每一次要將陣列清0,否則會出錯!ac include include using namespace std define m 1000000 struct node ha 100 int main int k 0 for i 0 i ...
Hdu 1053 Entropy查出錯(修改)
pragma warning disable 4786 include include include includeusing namespace std struct node int findminindex vector ht,int n for i n 1 i m i return ht ...
hdu1053(哈夫曼編碼)
題意是,給出一排字串,要求求出字元的8位編碼的長度,哈夫曼編碼值,以及之間的比值 因為僅僅只要求求出哈夫曼編碼值,所以不用建立哈夫曼樹,可以建立優先佇列,只要將每次最小的 出隊的兩個元素合成乙個新的大數,然後放進優先佇列中,直到只剩下乙個元素為止,那個元素就是哈夫曼編碼值。注意只有一種字元的情況 a...