#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"); else printf("yes\n"); } return 0; }
《哈夫曼编码》hdu acm 5.2.8 huffman编码
最新推荐文章于 2024-07-29 14:07:01 发布