您的位置:首页 > 其它

POJ 1862 优先队列

2012-08-29 11:20 162 查看
题目大意百度来的。看不懂=.=

说科学家有奇怪生物,每两个会合并,合并后的重量为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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  生物 百度 ini