题目大意百度来的。看不懂=.=
说科学家有奇怪生物,每两个会合并,合并后的重量为2*sqrt(m1*m2);
求最终合并的生物最小重量。
由于m1+m2>=2*sqrt(m1+m2);
所以每次在优先队列中取出2个元素,进行合并。保证最后的解最小。
题意没懂WA了一次。
#include<iostream>
#include<queue>
#include<cmath>
using namespace std;double max( double a,double b ){ return a>b?a:b; }int main()
{int N;while( scanf("%d",&N)!=EOF ){priority_queue< double,vector<double>,less<double> > PQ;double wi;for( int i=0;i<N;i++ ){scanf( "%lf",&wi );PQ.push(wi);}double ans=PQ.top();double m=0;double a,b;while( PQ.size()!=1 ){a=PQ.top();PQ.pop();b=PQ.top();PQ.pop();PQ.push( 2*sqrt(a*b) );}printf( "%.3lf\n",PQ.top() );}return 0;
}