用huffman计算的最小WPL解决果子合并的问题
在网上看到ACM练习里面的果子合并问题(就是弄几堆果子搬来搬去,要求节省体力的那个)想到算法课上计算过huffman的最小WPL可以解决该问题,大概思想是将所有果子堆的数目放到数组里,排序找到两个最小的,相加放进第二个位置,下次排序从第二个位置开始,以此类推。
#include "stdio.h"
void swap(int x,int y)
{
int temp;
temp=x;
x=y;
y=temp;
}
void sortfrom(int n,int *a,int size)
{
int i;
for(i=n;i<size-n;i++)
{
if(a[i]<a[n])
swap(a[i],a[n]);
else if(a[n]<a[i]<=a[n+1])
swap(a[i],a[n+1]);
}
}
main()
{
int size,i,n;
int *array;
scanf("%d",&size);
array=(int *)malloc(size*(sizeof(int)));
for(i=0;i<size;i++)
{
scanf("%d",&array[i]);
}
for(i=0;i<size-1;i++)
{
sortfrom(i,array,size);
array[i+1]=array[i]+array[i+1];
printf("%d",array[i+1]);
}
}
{
int temp;
temp=x;
x=y;
y=temp;
}
void sortfrom(int n,int *a,int size)
{
int i;
for(i=n;i<size-n;i++)
{
if(a[i]<a[n])
swap(a[i],a[n]);
else if(a[n]<a[i]<=a[n+1])
swap(a[i],a[n+1]);
}
}
main()
{
int size,i,n;
int *array;
scanf("%d",&size);
array=(int *)malloc(size*(sizeof(int)));
for(i=0;i<size;i++)
{
scanf("%d",&array[i]);
}
for(i=0;i<size-1;i++)
{
sortfrom(i,array,size);
array[i+1]=array[i]+array[i+1];
printf("%d",array[i+1]);
}
}