题目:http://acm.sdut.edu.cn/sdutoj/showproblem.php?pid=2127&cid=1184
哈夫曼树。
1 #include<stdio.h> 2 #include<string.h> 3 #include<stdlib.h> 4 int a[11000]; 5 6 int cmp(const void *a,const void *b) 7 { 8 return *(int *)a-*(int *)b; 9 } 10 int main() 11 { 12 int n,i,sum=0,t,j; 13 scanf("%d",&n); 14 for(i=0; i<n; i++) 15 scanf("%d",&a[i]); 16 qsort(a,n,sizeof(a[0]),cmp); 17 18 for(i=1; i<n; i++) 19 { 20 a[i]+=a[i-1]; 21 t=a[i]; 22 sum+=a[i]; 23 for(j=i+1; j<n; j++) 24 { 25 if(a[j]<t) 26 a[j-1]=a[j]; 27 else 28 break; 29 } 30 a[j-1]=t; 31 } 32 printf("%d ",sum); 33 }