一、题面
POJ1862
二、分析
反省一下,自己英语水平着实不行,该题其实就是问若给出若干个这种生物,根据这种体重变换方式,最终合并成一个后,体重最少是多少。根据公式
$m = 2\sqrt{m_{1}m_{2}}$
我们可以发现,就是一个开根号,那么为了能够得到更小的体重,肯定要让体重大的先合并,这样大的体重会被后面多次开根号,变得越来越小。这就是贪心策略。
三、AC代码
1 #include <cstdio> 2 #include <iostream> 3 #include <queue> 4 #include <algorithm> 5 #include <fstream> 6 #include <cmath> 7 8 using namespace std; 9 10 const int MAXN = 1e2+3; 11 int Data[MAXN]; 12 13 int main() 14 { 15 //freopen("input.txt", "r", stdin); 16 int N; 17 while(scanf("%d", &N)!=EOF) 18 { 19 for(int i = 0; i < N; i++) 20 scanf("%d", &Data[i]); 21 sort(Data, Data+N, greater<int>() ); 22 double ans; 23 ans = Data[0]; 24 for(int i = 1; i < N; i++) 25 { 26 ans = 2.0*sqrt(ans*Data[i]); 27 } 28 printf("%.03f\n", ans); 29 } 30 return 0; 31 }