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 }

 

转载于:https://www.cnblogs.com/naturepengchen/articles/3847776.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值