3183: UVA_12676_Inverting Huffman(哈夫曼树)

内存限制:128 MB 时间限制:1.000 S
评测方式:文本比较 命题人:
提交:15 解决:13

题目描述

静态霍夫曼编码是一种主要用于文本压缩的编码算法。给出的文本为 由N个不同字符组成的特定大小,算法选择N个代码,每个代码对应一个不同的字符 性格使用这些代码压缩文本。为了选择代码,算法构建一个 有N片叶子的二元根树。对于N≥2,树可按如下方式构建。 1.对于文本中的每个不同字符,构建一个仅包含单个节点的树,并将其分配给它 与文本中字符出现次数一致的权重。 2.建立一个包含上述N棵树的集合。 3.当s包含多个树时: (a) 选择具有最小权重的t1∈s,并将其从s中删除。 (b) 选择具有最小权重的t2∈s,并将其从s中删除。 (c) 构建一个新的树t,t1作为其左子树,t2作为其右子树,并将 t1和t2的权重之和。 (d) 将t包含在s中。 4.返回s中唯一保留的树。

输入

输入文件包含几个测试用例,每个测试用例如下所述。 第一行包含表示不同字符数的整数N(2≤N≤50) 出现在文本中的。第二行包含N个整数Li 指示代码的长度 通过霍夫曼算法为不同字符选择(i=1,2,…,N时,1≤Li≤50)。你可以 假设至少有一棵树,按照所述构建,生成具有给定长度的代码。

输出

对于每个测试用例,输出一行,其中一个整数表示最小大小(字符),以便生成的代码具有给定的长度。

样例输入 复制

2
1 1
4
2 2 2 2
10
8 2 4 7 5 1 6 9 3 9

样例输出 复制

2
4
89