#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
const int N=0x3f3f3f;
int n;
double b,c,tmp;
double Min=1000000;
double x[N],r[N];
void dfs(int t){
if(t>n) {
double low=0,high=0;
for (int i=1;i<=n;i++) {
low =min(low,x[i]-r[i]);
high=max(high,x[i]+r[i]);
}
Min=min(Min,high-low);}
else{
for(int j=t;j<=n;j++){
c=r[t];r[t]=r[j];r[j]=c;
tmp=0;
for(int i=1;i<t;i++){
b=x[i]+2.0*sqrt(r[i]*r[t]);
tmp=max(tmp,b);
}
if(tmp+r[1]+r[t]<Min){
x[t]=tmp;
dfs(t+1);
}
c=r[t];r[t]=r[j];r[j]=c;
}
}}
int main(){
cin>>n;
for(int i=1;i<=n;i++) cin>>r[i];
dfs(1);
cout<<Min;
return 0;
}
工作分配问题
最新推荐文章于 2024-10-08 12:54:42 发布