WA on #5 #12 #13
#include<bits/stdc++.h>
using namespace std;
int n;
const int N=1<<16;
double f[17][N];
double x[17],y[17];
int ccc[17][N];
double dis(double x1,double y1,double x2,double y2)
{
return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
}
void dp()
{
for(int i=1;i<(1<<n);i++)
{
for(int j=1;j<=n;j++)
{
if(i&(1<<(j-1))==0) continue;
if(i==(1<<(j-1)))
{
f[j][i]=dis(0,0,x[j],y[j]);
continue;
}
for(int z=1;z<=n;z++)
{
if((i&(1<<(z-1))==0)||(z==j)) continue;
f[j][i]=min(f[j][i],f[z][i-(1<<(j-1))]+dis(x[j],y[j],x[z],y[z]));
}
}
}
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++) cin>>x[i]>>y[i];
memset(f,127,sizeof(f));
double ans=f[1][1];
dp();
for(int i=1;i<=n;i++) ans=min(ans,f[i][(1<<n)-1]);
printf("%.2lf",ans);
return 0;
}