题意
给你若干个数,每次可选两个数 a,b 合并成 2∗a∗b−−−−√ ,直至最后剩下一个数,问你这个数最小是多少
思路
由这个合并的式子可以看出最后的那个数是每个数进行了若干次取平方根再乘起来的结果,且取平方根的总次数是与合并顺序无关的,所以我们应该让尽量大的数进行尽量多次开根,所以应该从大到小依次合并最终得到结果
代码
#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;
int w[10001];
int main()
{
int N;
double ans;
scanf("%d",&N);
for(int i=0;i<N;i++)
scanf("%d",&w[i]);
sort(w,w+N);
ans=w[N-1];
for(int i=N-2;i>=0;i--)
ans=2*sqrt(ans*w[i]);
printf("%.3f",ans);
return 0;
}