poj1862

一、题意:两个物体m1、m2相撞后会变成一个物体,这个物体的重量会变成2*sqrt(m1*m2)。有n个物体,假设只会发生两两相撞,求最后剩下的最小重量。

二、思路:简单的贪心。越大的数开越多的次方,最后得到的一定是最小的重量。因此按重量从小到大排,假设三个物体,则最小重量=2*sqrt(m0*2*sqrt(m1*m2))。n个物体以此类推

三、代码:

 1 #include"iostream"
 2 #include"stdio.h"
 3 #include"algorithm"
 4 #include"cmath"
 5 using namespace std;
 6 int n;
 7 double num[1000];
 8 int main()
 9 {
10     while(scanf("%d",&n)==1)
11     {
12         for(int i=0;i<n;i++)
13             cin>>num[i];
14         sort(num,num+n);
15 
16         double ans=0;
17         if(n==1)
18             ans=num[0];
19         else{
20             ans=2*sqrt(num[n-1]*num[n-2]);
21             for(int i=n-3;i>=0;i--)
22             {
23                 ans=2*sqrt(num[i]*ans);
24             }
25         }
26         printf("%.3llf\n",ans);
27     }
28     return 0;
29 }
View Code

 

posted @ 2018-11-26 21:25  Run_For_Love  阅读(444)  评论(0编辑  收藏  举报