zoj1543

哈夫曼树,而且好像还没有用到哈夫曼树的性质

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
double p[20000];
char visit[20000];
int head;
int find()
{
 int i, re;
 double max = 0;
 for(i=0; i<head; i++)
 {
  if(visit[i]==0 && p[i]>max)
  {
   re = i;
   max = p[i];
  }
 }
 visit[re] = 1;
 return re;
}
int main ()
{
 int i, j, k;
 int n;
 while(scanf("%d", &n) != EOF)
 {
  memset(visit, 0, sizeof(visit));
  for(head=0; head<n; head++)
   scanf("%lf", &p[head]);
  for(i=0; i<n-1; i++)
  {
   int a = find();
   int b = find();
   double c = 2 * sqrt(p[a] * p[b]);
   p[head] = c;
   head++;
  }
  printf("%.3lf\n", p[head-1]);
 }
 return 0;
}

你可能感兴趣的:(c)