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 }