【贪心】构造Huffman树的总费用/合并果子
用数组足够
#include <stdio.h> #include <stdlib.h> int compare(const void*a,const void*b) { return(*(int*)a-*(int*)b); } int main() { int n; scanf("%d",&n); int *num=(int *)malloc(2*n*sizeof(int)); int i,j; for(i=0; i<n; i++) { scanf("%d",num+i); } qsort(num,n,sizeof(int),compare); for(i=0; i<n-1; i++) { num[n+i]=num[2*i]+num[2*i+1]; qsort(num+2*i+2,n-i-1,sizeof(int),compare); } for(j=2*i; j<=n+i-1; j++) { printf("%d ",num[j]); } return 0; }