#include<bits/stdc++.h>
#define FOR(i,l,r) for(int i=l;i<=r;i++)
typedef long long int LL;
using namespace std;
const int maxn=30;
const double inf=600;
struct u{
double x,y;
}A[maxn];
int n;
double dp[18][(1<<18)];
double dis(int a ,int b){
return sqrt( (A[a].x-A[b].x)*(A[a].x-A[b].x)+(A[a].y-A[b].y)*(A[a].y-A[b].y) );
}
int main(){
cin>>n;
FOR(i,1,n){
scanf("%lf%lf",&A[i].x,&A[i].y);
}
memset(dp,inf,sizeof(dp));
for(int s=1;s<=(1<<n)-1;s++){
for(int i=1;i<=n;i++){
if(s&(1<<(i-1))==0) continue;
if(s==(1<<(i-1))){dp[i][s]=0;continue;}
for(int j=1;j<=n;j++){
if(i==j || s&(1<<(j-1))==0 )continue;
dp[i][s]=min(dp[i][s],dp[j][s-(1<<(i-1))]+dis(i,j));
}
}
}
double ans=inf; int s=(1<<n)-1;
for(int i=1;i<=n;i++){
double tp=dis(i,0);
ans=min(ans,tp+dp[i][s]);
}
printf("%.2lf",ans);
return 0;
}
思路参考题解第一篇,就差照抄一遍了为什么wa了一个点