zoukankan      html  css  js  c++  java
  • UVA 10954 Add All

    UVA_10954

        看了别人解题报告之后发现累加的过程可以这样操作,每次取最小的两个元素加和,然后把和当作一个新元素放进集合,直到剩下一个元素,然后把中间结果加起来就是要求的结果。实际上这个题目就是哈弗曼编码,在LRJ树上155页有讲到。

    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    #define MAXD 5010
    int N, a[MAXD], q[MAXD];
    int cmp(const void *_p, const void *_q)
    {
    int *p = (int *)_p;
    int *q = (int *)_q;
    return *p - *q;
    }
    void solve()
    {
    int i, j, ans, cur, front, rear, x[2];
    for(i = 0; i < N; i ++)
    scanf("%d", &a[i]);
    qsort(a, N, sizeof(a[0]), cmp);
    cur = front = rear = 0;
    for(i = 1; i < N; i ++)
    {
    for(j = 0; j < 2; j ++)
    {
    if(cur != N)
    {
    x[j] = a[cur];
    if(front == rear || q[front] >= x[j])
    ++ cur;
    else
    x[j] = q[front ++];
    }
    else
    x[j] = q[front ++];
    }
    q[rear ++] = x[0] + x[1];
    }
    for(i = ans = 0; i < rear; i ++)
    ans += q[i];
    printf("%d\n", ans);
    }
    int main()
    {
    for(;;)
    {
    scanf("%d", &N);
    if(!N)
    break;
    solve();
    }
    return 0;
    }


  • 相关阅读:
    排序算法比较
    直接选择排序
    静态查找表和动态查找表
    memset函数
    二叉树
    使用vue+Element的Upload+formData实现图片传到SpringBoot,再上传到fastdfs
    vue中的export与export default的区别
    人人开源
    SpringBoot注解
    大厂薪资
  • 原文地址:https://www.cnblogs.com/staginner/p/2308941.html
Copyright © 2011-2022 走看看