zoukankan      html  css  js  c++  java
  • HDU 1053

    求哈夫曼编码后最小内存

    就是个哈夫曼编码原理


    取最小的两个值合并在一起
    深度就是被合并了几次
    所以直接把每次合并结果加到答案里
    这样 n 次合并就表示 n 的树深,该位置的量就被累计加了 n 次, 即 子节点权值*n

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <algorithm>
     5 using namespace std;
     6 char s[10000];
     7 int c[28];
     8 bool cmp(int a,int b)
     9 {
    10     return a>b;
    11 }
    12 int main()
    13 {
    14     while(~scanf("%s",s),strcmp(s,"END"))
    15     {
    16         memset(c,0,sizeof(c));
    17         int m=strlen(s);
    18         for(int i=0;i<m;i++)
    19         {
    20             if(s[i]=='_') c[0]++;
    21             else c[s[i]-'A'+1]++;
    22         }
    23         sort(c,c+27,cmp);
    24         int n=0;
    25         while(c[n]) n++;//取前面有效点集 
    26         int ans=0;
    27         for(int i=n-1;i>0;i--)
    28         {
    29             c[i-1]+=c[i]; //合并 
    30             ans+=c[i-1];
    31             sort(c,c+i,cmp);//更新点集 
    32         }
    33         if(n==1) ans=c[0];
    34         printf("%d %d %.1lf
    ",8*m,ans,8.0*m/ans);
    35     }
    36 }
    我自倾杯,君且随意
  • 相关阅读:
    第06组Alpha冲刺(4/6)
    第06组Alpha冲刺(3/6)
    第06组Alpha冲刺(2/6)
    第06组 Alpha冲刺 (1/6)
    08-js函数
    07-数组
    06-js分支
    05-js运算符
    04-js变量
    03-css3D转换
  • 原文地址:https://www.cnblogs.com/nicetomeetu/p/5465280.html
Copyright © 2011-2022 走看看