1395_Huffuman树

2022-5-16 18:17| 发布者: Hocassian| 查看: 46| 评论: 0|原作者: 肇庆学院ACM合集

摘要:
C:\Users\Administrator\Downloads\2019-10-12-10-14-2-89503852420400-Problem List-采集的数据-后羿采集器.html

Pro.ID

1395

Title

Huffuman树

Title链接

http://10.20.2.8/oj/exercise/problem?problem_id=1395

AC

7

Submit

14

Ratio

50.00%

时间&空间限制

  • Time Limit: 300/100 MS (Java/Others)     Memory Limit: 10000/5000 K (Java/Others)
  • 描述

    Huffman树在编码中有着广泛的应用。在这里,我们只关心Huffman树的构造过程。

    给出一列数 { pi } = { p0,  p1,  …,  pn-1 },用这列数构造Huffman树的过程如下:

    1.  找到{pi}中最小的两个数,设为 pa 和 pb,将 pa 和 pb 从 { pi } 中删除掉,然后将它们的和加入到 { pi } 中。这个过程的费用记为pa + pb

    2.  重复步骤1,直到 { pi } 中只剩下一个数。

    在上面的操作过程中,把所有的费用相加,就得到了构造Huffman树的总费用。

    本题任务:对于给定的一个数列,现在请你求出用该数列构造Huffman树的总费用。

    例如,对于数列 { pi } = { 5,  3,  8,  2,  9 },Huffman树的构造过程如下:

    1.  找到{5,  3,  8,  2,  9}中最小的两个数,分别是2和3,从{pi}中删除它们并将和5加入,得到{5,  8,  9,  5},费用为5。

    2.  找到{5,  8,  9,  5}中最小的两个数,分别是5和5,从{pi}中删除它们并将和10加入,得到{8,  9,  10},费用为10。

    3.  找到{8,  9,  10}中最小的两个数,分别是8和9,从{pi}中删除它们并将和17加入,得到{10,  17},费用为17。

    4.  找到{10,  17}中最小的两个数,分别是10和17,从{pi}中删除它们并将和27加入,得到{27},费用为27。

    5.  现在,数列中只剩下一个数27,构造过程结束,总费用为5+10+17+27=59。

    输入

    多测试用例,每个测试用例的第一行是一个正整数 n( n ≤ 100000 )。

    接下来是n个正整数,表示p0,  p1,  …,  pn-1,每个数不超过1000。

    输出

    Description

    Huffman树在编码中有着广泛的应用。在这里,我们只关心Huffman树的构造过程。

    给出一列数 { pi } = { p0,  p1,  …,  pn-1 },用这列数构造Huffman树的过程如下:

    1.  找到{pi}中最小的两个数,设为 pa 和 pb,将 pa 和 pb 从 { pi } 中删除掉,然后将它们的和加入到 { pi } 中。这个过程的费用记为pa + pb

    2.  重复步骤1,直到 { pi } 中只剩下一个数。

    在上面的操作过程中,把所有的费用相加,就得到了构造Huffman树的总费用。

    本题任务:对于给定的一个数列,现在请你求出用该数列构造Huffman树的总费用。

    例如,对于数列 { pi } = { 5,  3,  8,  2,  9 },Huffman树的构造过程如下:

    1.  找到{5,  3,  8,  2,  9}中最小的两个数,分别是2和3,从{pi}中删除它们并将和5加入,得到{5,  8,  9,  5},费用为5。

    2.  找到{5,  8,  9,  5}中最小的两个数,分别是5和5,从{pi}中删除它们并将和10加入,得到{8,  9,  10},费用为10。

    3.  找到{8,  9,  10}中最小的两个数,分别是8和9,从{pi}中删除它们并将和17加入,得到{10,  17},费用为17。

    4.  找到{10,  17}中最小的两个数,分别是10和17,从{pi}中删除它们并将和27加入,得到{27},费用为27。

    5.  现在,数列中只剩下一个数27,构造过程结束,总费用为5+10+17+27=59。

    Input

    多测试用例,每个测试用例的第一行是一个正整数 n( n ≤ 100000 )。

    接下来是n个正整数,表示p0,  p1,  …,  pn-1,每个数不超过1000。

    Output

    每个测试用例输出一行:用这些数构造Huffman树的总费用。

    Sample Input

    5
    5  3  8  2  9

    Sample Output

    59

    Author

    样例输入

    5
    5  3  8  2  9

    样例输出

    59

    提示

    作者


    路过

    雷人

    握手

    鲜花

    鸡蛋

    最新评论

    返回顶部