zoukankan      html  css  js  c++  java
  • 九度OJ 1172:哈夫曼树 (贪心)

    时间限制:1 秒

    内存限制:32 兆

    特殊判题:

    提交:6701

    解决:2954

    题目描述:

    哈夫曼树,第一行输入一个数n,表示叶结点的个数。需要用这些叶结点生成哈夫曼树,根据哈夫曼树的概念,这些结点有权值,即weight,题目需要输出所有结点的值与权值的乘积之和。

    输入:

    输入有多组数据。
    每组第一行输入一个数n,接着输入n个叶节点(叶节点权值不超过100,2<=n<=1000)。

    输出:

    输出权值。

    样例输入:
    5  
    1 2 2 5 9
    样例输出:
    37
    来源:
    2010年北京邮电大学计算机研究生机试真题

    思路:

    经典贪心算法。每次剔除最小的两个数相加然后插入排序数组,并累加这个和。最后累加的和就是总权值。


    代码:

    #include <stdio.h>
    #include <stdlib.h>
     
    #define N 1000
     
    int cmp(const void *a, const void *b)
    {
        return *(int *)a - *(int *)b;
    }
     
    int main(void)
    {
        int n, i;
        int a[N];
        int sum;
     
        while (scanf("%d", &n) != EOF)
        {
            sum = 0;
            for(i=0; i<n; i++)
                scanf("%d", &a[i]);
            for(i=0; i<n-1; i++)
            {
                qsort(a+i, n-i, sizeof(a[0]), cmp);
                a[i+1] += a[i];
                sum += a[i+1];
            }
            printf("%d
    ", sum);
        }
     
        return 0;
    }
    /**************************************************************
        Problem: 1172
        User: liangrx06
        Language: C
        Result: Accepted
        Time:30 ms
        Memory:912 kb
    ****************************************************************/


    编程算法爱好者。
  • 相关阅读:
    千拣万拣,拣个烂灯盏
    在JavaScript中控制链接的点击
    一条SQL语句
    Atlas与页面缓存冲突造成报错问题
    猴子他爹
    没有源代码也可以调试
    IC卡
    郭昶
    在js脚本中找到控件
    郭昶来到咱们学车场
  • 原文地址:https://www.cnblogs.com/liangrx06/p/5083855.html
Copyright © 2011-2022 走看看