标签:
观察发现m1+m2变为2*sqrt(m1*m2)质量是能够减少的,
因此按质量从大到小排序,每次取最大质量的两个合并,减少的质量是最多的。
合并n-1次,最终得到的一个数就是结果。
这里用优先队列写的比较方便。
#include<cstdio> #include<queue> #include<cmath> using namespace std; priority_queue<double> q; int main() { int n,i; double x,a,b; while(~scanf("%d",&n)) { while(!q.empty()) q.pop(); for(i=0;i<n;i++) { scanf("%lf",&x); q.push(x); } for(i=0;i<n-1;i++) { a=q.top();q.pop(); b=q.top();q.pop(); q.push(2*sqrt(a*b)); } printf("%.3lf\n",q.top()); } return 0; }
标签:
原文地址:http://blog.csdn.net/u011032846/article/details/45372391