《哈夫曼编码》hdu acm 5.2.8 huffman编码

来源:互联网 发布:抽奖软件源代码下载 编辑:程序博客网 时间:2024/05/29 19:53
#include<cstdio>  #include<cstring>  #include<set>  using namespace std;int haffman(char *x){int len = strlen(x);int i, t, sum, cnt[26];multiset<int>m;memset(cnt, 0, sizeof(cnt));for (i = 0;i<len;i++){t = x[i] - 'a';cnt[t]++;}for (i = 0;i<26;i++){if (cnt[i]){m.insert(cnt[i]);}}if (m.size() == 1){return *m.begin();}else{sum = 0;while (m.size()>1){t = 0;for (i = 0;i<2;i++){t += *m.begin();m.erase(m.begin());}m.insert(t);sum += t;}return sum;}}int main(){int cas, n;scanf("%d", &cas);while (cas--){char s[1000];scanf("%d%s", &n, s);if (haffman(s)>n)printf("no\n");elseprintf("yes\n");}return 0;}
0 0
原创粉丝点击