您的位置:首页 > 产品设计 > UI/UE

poj 1862 priority_queue

2012-02-17 22:57 274 查看
题意:给出N个数m1,m2,m3...任意两个相撞会形成一个新的m,m=2*sqrt(mi*mj),求最好剩下的最小的m

思路:如果要想m最小,则要求mi,mj分别最小,递归的想下去,则应该每次保证最大的两个最开始相撞,所以用到了优先队列。

#include<iostream>
#include<vector>
#include<queue>
#include<cmath>
using namespace std;
int main()
{
int N,M;
double a,b,c,tmp;
priority_queue<double,vector<double>,less<double> > Q;
scanf("%d",&N);
M=N;
while(N--)
{
scanf("%lf",&a);
Q.push(a);
}
M--;
while(M--)
{
b=Q.top();
Q.pop();
c=Q.top();
Q.pop();
tmp=2*sqrt(b*c);
Q.push(tmp);
}
printf("%.3f\n",Q.top());
//system("pause");
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: