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;
}
说科学家有奇怪生物,每两个会合并,合并后的重量为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;
}
相关文章推荐
- poj1862~Stripies~贪心+优先队列
- POJ 1862(优先队列)
- POJ 1862 & ZOJ 1543 Stripies(贪心 | 优先队列)
- POJ 1862- Stripies(优先队列)
- POJ 1862 Stripies 贪心+优先队列
- POJ 1862 Stripies 贪心+优先队列
- POJ 1862 Stripies (贪心、优先队列)
- POJ 1862 & ZOJ 1543 Stripies(贪心 | 优先队列)
- POJ 1862 Stripies (priority_queue 优先队列)
- POJ - 2431(优先队列)
- poj -3614 Sunscreen(贪心 + 优先队列)
- POJ 3465 Battle(优先队列+贪心模拟)
- POJ 1442-Black Box(动态区间第K小-优先队列)
- POJ - 2431 Expedition(优先队列)
- poj 1724 ROADS(dfs)||(优先队列+dijkstra)
- POJ 3253----Fence Repair 要用到优先队列!!!
- POJ 3687 Labeling Balls 拓扑排序 优先队列实现
- POJ 1338 Ugly Number 优先队列
- POJ 1451 T9 字典树+优先队列
- POJ 3253 Fence Repair 贪心+优先队列