zoukankan      html  css  js  c++  java
  • 基础实验4-2.7 修理牧场 (25分)-堆+哈夫曼树

     解题思路:最优二叉树思想

    #include <stdio.h>
    #define MAX 10001
    int H[MAX];
    int n;
    void AjudstUp(int a[],int k) {
        a[0]=a[k];
        int i=k/2;
        while(i>0&&a[i]>a[0]) {
            a[k]=a[i];
            k=i;
            i=k/2;
        }
        a[k]=a[0];
    }
    void AdjustDown(int a[],int k) {
        a[0]=a[k];
        int i;
        for(i=k*2; i<=n; i*=2) {
            if(i<n&&a[i]>a[i+1])
                i++;
            if(a[0]<=a[i])break;
            else {
                a[k]=a[i];
                k=i;
            }
    
        }
        a[k]=a[0];
    }
    int get(int a[]) {
        int tmp;
        tmp=a[1];
        a[1]=a[n];
        a[n]=tmp;
        int x=a[n];
        n--;
        AdjustDown(a,1);
        return x;
    }
    int main() {
        scanf("%d",&n);
        int i;
        int sum=0;
        for(i=1; i<=n; i++) {
            scanf("%d",&H[i]);
            AjudstUp(H,i);
        }
        while(n!=1) {
            int x=get(H);
            int y=get(H);
            n++;
            H[n]=x+y;
            sum+=H[n];
            AjudstUp(H,n);
        }
        printf("%d",sum);
    
    }
    勤能补拙,熟能生巧
  • 相关阅读:
    用表组织数据
    SQL Server 2008创建数据库
    c#字符串常用方法
    属性升级介绍
    c#语法
    初识C#
    CSS动画
    YCSB性能测试工具使用
    高性能的Redis代理TwemProxy
    JVM垃圾回收总结
  • 原文地址:https://www.cnblogs.com/snzhong/p/12456614.html
Copyright © 2011-2022 走看看