C语言合并果子-贪心算法

ustbfym 2019-12-08

/*有几堆水果。每次你把两堆东西移到一起,形成更大的一堆。每个动作消耗的能量是两堆水果的总重量。如何把所有的水果堆在一起,消耗最少的能量?*/

以上是题目,该题首先要读懂题目,每次移到一起以后都要将数组重新排序再次移动。

#include<stdio.h>

int main(){
    
    int t, n, m = 0;
    int i = 0, j = 0;
    scanf("%d",&n);
    int sum[n];

    for(i = 0; i<n;i++){
        scanf("%d",&sum[i]);
    }
    
    for(i = 0; i<n-1;i++){
        for(j = 0; j<n-i-1; j++){
            if(sum[j]>sum[j+1]){
                t = sum[j];
                sum[j] = sum[j+1];
                sum[j+1] = t; 
            }
        }
    }
    for(i = 1;i<n;++i){
        sum[i] += sum[i-1];
        m += sum[i];
        for(j = i+1;j<n&&sum[j]<sum[j-1];++j){
            t = sum[j-1];
            sum[j-1] = sum[j];
            sum[j] = t;
        }
    } 
    
    printf("%d",m);
    
    return 0;
}

相关推荐