Uva--10012(暴力枚举)
2014-07-16 00:15:09
题意&思路:在一个矩形的底部放圆,问矩形的最小长度。直接暴力枚举,要注意判圆重叠!
1 #include <cstdio> 2 #include <cmath> 3 #include <iostream> 4 #include <algorithm> 5 using namespace std; 6 7 int n,m; 8 double ans,r[10],x[10],tans; 9 10 double Distr(double r1,double r2){ 11 return sqrt((r1 + r2) * (r1 + r2) - (r1 - r2) * (r1 - r2)); 12 } 13 14 int main(){ 15 scanf("%d",&n); 16 while(n--){ 17 scanf("%d",&m); 18 for(int i = 0; i < m; ++i){ 19 scanf("%lf",&r[i]); 20 } 21 ans = 1000000000; 22 sort(r,r + m); 23 do{ 24 x[0] = r[0]; 25 for(int i = 1; i < m; ++i){ 26 double xmax = 0; 27 for(int j = 0; j < i; ++j){ 28 xmax = max(xmax,x[j] + Distr(r[i],r[j])); 29 } 30 x[i] = xmax; 31 } 32 ans = min(ans,x[m - 1] + r[m - 1]); 33 }while(next_permutation(r,r + m)); 34 printf("%.3lf\n",ans); 35 } 36 return 0; 37 }