#P1069. Huffuman树
Huffuman树
题目描述
问题描述
基础练习 Huffman 树。
时间限制:1.0s 内存限制:512.0MB。
Huffman 树在编码中有着广泛的应用。在这里,我们只关心 Huffman 树的构造过程。
给出一列数 ,用这列数构造 Huffman 树的过程如下:
- 找到 中最小的两个数,设为 和 ,将 和 从 中删除掉,然后将它们的和加入到 中。这个过程的费用记为 。
- 重复步骤 1,直到 中只剩下一个数。
在上面的操作过程中,把所有的费用相加,就得到了构造 Huffman 树的总费用。
本题任务:对于给定的一个数列,现在请你求出用该数列构造 Huffman 树的总费用。
例如,对于数列 ,Huffman 树的构造过程如下:
- 找到 中最小的两个数,分别是 2 和 3,从 中删除它们并将和 5 加入,得到 ,费用为 5。
- 找到 中最小的两个数,分别是 5 和 5,从 中删除它们并将和 10 加入,得到 ,费用为 10。
- 找到 中最小的两个数,分别是 8 和 9,从 中删除它们并将和 17 加入,得到 ,费用为 17。
- 找到 中最小的两个数,分别是 10 和 17,从 中删除它们并将和 27 加入,得到 ,费用为 27。
- 现在,数列中只剩下一个数 27,构造过程结束,总费用为 。
输入格式
输入的第一行包含一个正整数 ()。
接下来是 个正整数,表示 ,每个数不超过 1000。
输出格式
输出用这些数构造 Huffman 树的总费用。
样例输入
5
5 3 8 2 9
样例输出
59