poj1862~Stripies~贪心+优先队列

来源:互联网 发布:网络教育培训加盟 编辑:程序博客网 时间:2024/06/05 09:23

题意就是说有一群细胞一样的东西,2个重量分别为a和b的细胞碰撞后重量就会变成2*sqrt(a*b),问你依次碰撞最终变成一个细胞时的最小重量。

策略是贪心策略,看题解有的人列了一堆公式,好复杂的

其实就是一点:“最大的数,肯定要开最多次方,才能使得结果最小”

然后用优先队列做就ok了

#include<iostream>#include<string>#include<queue>#include<cmath>using namespace std;int main(){int n,i;double a,x,y,z;priority_queue<double>q;cin>>n;for(i=0;i<n;i++){scanf("%lf",&a);q.push(a);}while(q.size()!=1)  //队列里如果只剩一个了就退出{x=q.top();//取出队里最大的两个元素      q.pop();y=q.top();q.pop();z=2*sqrt(x*y);  //计算后再放回去q.push(z);}printf("%.3lf\n",q.top());}


 

0 0
原创粉丝点击