#include <bits/stdc++.h>
#define rep(i,l,r) for(int i=(l);i<=(r);i++)
using namespace std;
typedef long long ll;
typedef double db;
const int N=20;
const db INF=1e9+24;
int n;
db x[N],y[N],mem[N][1<<N];
bool vis[N][1<<N];
db edst(db x1,db y1,db x2,db y2)
{
return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
}
db dp(int i,int k)
{
db& ans=mem[i][k];
if(k==1<<(i-1)) return edst(0,0,x[i],y[i]);
if(k==0) return INF;
if(!vis[i][k]) return ans;
vis[i][k]=1;
rep(j,1,n)
{
if(i==j) continue;
if(k&(1<<(j-1))==0) continue;
ans=min(ans,edst(x[i],y[i],x[j],y[j])+dp(j,k-(1<<(i-1))));
}
return ans;
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("in.in","r",stdin);
freopen("out.out","w",stdout);
#endif
ios::sync_with_stdio(false);
cin>>n;
rep(i,1,n) cin>>x[i]>>y[i];
db ans=INF;
rep(i,1,n) ans=min(ans,dp(i,(1<<n)-1));
cout<<ans;
}
不知道能不能记忆化,但是我是瞎写的,样例都没过。