POJ3253

来源:互联网 发布:sql insert case when 编辑:程序博客网 时间:2024/06/05 20:21
#include <iostream>
#include <stdio.h>
#include <string.h>


#define maxn 20000


using namespace std;


int l[maxn];
int n,h;
long long int minx;


long long int ans;


void heap_sort( int x)//小根堆
{
    int lg, lr, t;
    while( (x<<1) <= h)
    {
        lg = x << 1;
        lr = ( x << 1) + 1;
        if( lr <= h && l[lg] > l[lr])
         lg = lr;
        if( l[x] > l[lg])
        {
             t = l[x];
             l[x] = l[lg];
             l[lg] = t;
             x = lg;
        }
        else
        break;
    }
    return ;
}


int main()
{
    int i;
    while( 1 == scanf("%d",&n))
    {
        for( i = 1; i<=n; i++)
         scanf("%d",&l[i]);


         h = n;
         for( i = n/2; i > 0 ; i--)//堆排序
          heap_sort(i);


        ans = 0;


        while( h > 1)//去顶端堆
        {
            minx = l[1];
            l[1] = l[h];


            h--;
            heap_sort(1);


            minx += l[1];
            l[1] = minx;
            heap_sort(1);


            ans += minx;
        }


        printf("%I64d\n",ans);
    }
    return 0;
}

0 0
原创粉丝点击