思路:
每次找最大的两个数来合并,直到合并到只剩一个
问题:如何证明
有点坑,用C++能过,用G++就过不了
#include <cstdio>
#include <cstring>
#include <stack>
#include <queue>
#include <algorithm>
#include<iostream>
#include<map>
#include<set>
#include<math.h>
using namespace std;
#define MAX_A 10000
int cmp(int a,int b){
return a<b;
}
//维护一个优先队列
priority_queue <double> pque;
int main(){
int n;
scanf("%d",&n);
double j;
for(int i=0;i<n;i++){
scanf("%lf",&j);
pque.push(j);
}
int k = n;//当前stripiesd的数量
while(k!=1){
double a,b;
a = pque.top();
pque.pop();
b = pque.top();
pque.pop();
pque.push(2*sqrt(a*b));
k--;
}
printf("%.3lf\n",pque.top());
return 0;
}