認真讀題,別怕題長,此題考查的就是哈夫曼樹並求出最小編碼值,注意每一次要將陣列清0,否則會出錯!
ac**:
#include#includeusing
namespace
std;
#define m 1000000
struct
node
ha[100
];int
main()
int k=0
;
for(i=0;i<30;i++)
//構造哈夫曼樹
memset(ha,0,sizeof
(ha));
for(i=1;i<=k;i++)
ha[i].data=b[i];
for(i=1;i//
控制掃瞄的次數
else
if(ha[j].data0
)
}ha[k+i].data=ha[x1].data+ha[x2].data;
ha[k+i].l=x1;
ha[k+i].r=x2;
ha[x1].p=k+i;
ha[x2].p=k+i;
}if(k==1)//
當只有一種字元的時候
s1=b[1]*1
;
else
s1+=b[i]*x;}}
printf(
"%d %d %.1lf\n
",l*8,s1,l*8*1.0/s1);
}return0;
}
HDU 1053 Entropy 哈夫曼樹
題意 根據哈夫曼編碼原則壓縮乙個字串,問壓縮後的大小和壓縮比。思路 就是寫一棵哈夫曼樹。ps 第一次寫哈夫曼樹,寫得好醜 problem hdu 1053 author nmfloat include include include include include include include 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...