从最大的开始计算直到最小的,结果的总weight会是最小值,虽然不会证明。。但直觉上是这样,AC了
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
int cmp1543(const void *p1, const void *p2)
{
return *(int *) p2 - *(int *) p1;
}
int main()
{
int n;
while (scanf("%d", &n) != EOF)
{
int *array = (int *) malloc(n * sizeof(int));
int i, total = n;
double r;
while (n--)
scanf("%d", array + n);
qsort(array, total, sizeof(int), cmp1543);
r = *array;
for (i = 1; i < total; i++)
{
r = 2 * sqrt(*(array + i) * r);
}
printf("%.3lf\n", r);
free(array);
}
return 0;
}