当前位置: 代码迷 >> 综合 >> POJ 1862 优先队列
  详细解决方案

POJ 1862 优先队列

热度:77   发布时间:2024-01-20 20:19:26.0

题目大意百度来的。看不懂=.=

说科学家有奇怪生物,每两个会合并,合并后的重量为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;
}