现在的位置: 首页 > 综合 > 正文

10954 – Add All

2013年04月22日 ⁄ 综合 ⁄ 共 661字 ⁄ 字号 评论关闭
描述:就是构建哈夫曼树,然后再把构建哈夫曼树过程中出现的和(就是两个数字相加所得到的新的数字)全部相加就是要输出的结果了
#include <cstdio>
#include <cstdlib>
#include <algorithm>
int cmp(const void *p1,const void *p2)
{
    return *(int *)p1 - *(int *)p2;
}
int num[5010],score[100010];
int main()
{
    //freopen("a.txt","r",stdin);
    int n,m,v,sum;
    while(scanf("%d",&n)!=EOF)
    {
        if(!n) break;
        for(int i=0; i<n; i++) scanf("%d",&num[i]);
        sum=0;
        while(1)
        {
            qsort(num,n,sizeof(int),cmp);
            score[0]=num[0]+num[1];
            sum+=score[0];
            m=0;
            v=1;
            for(int i=2; i<n; i++)
            {
                score[v++]=num[i];
                if(i+1<n)
                {
                    i++;
                    score[v++]=num[i];
                }
                qsort(score+m,v-m,sizeof(int),cmp);
                score[m+1]=score[m]+score[m+1];
                m++;
                sum+=score[m];
            }
            if(v-m<2) break;
            n=0;
            for(int i=m; i<v; i++) num[n++]=score[i];
        }
        printf("%d\n",sum);
    }
    return 0;
}

抱歉!评论已关闭.