/*need a great space ... And Lowbit understand is not very good first put in the blog after slowly study*/#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#defineINF 999999999;#defineMAXN 1050000using namespacestd;intN,A[MAXN];Doublex[ -],y[ -],g[ -][ -],f[maxn][ +],ans=inf;DoubleDis (DoubleX1,DoubleY1,DoubleX2,Doubley2) { returnsqrt ((x1-x2) * (X1-X2) + (y1-y2) * (y1-y2));}intLintx) { returnx& (-x);} intMain () {Freopen ("linec.in","R", stdin); Freopen ("Linec.out","W", stdout); scanf ("%d",&N); for(intI=1; i<=n;i++) scanf ("%LF%LF",&x[i],&Y[i]); for(intI=1; i<=n;i++) for(intj=1; j<=n;j++) G[i][j]=Dis (X[i],y[i],x[j],y[j]); for(intI=0; i<=n;i++) a[1<<i]=i+1; for(intI=1;i< (1<<n); i++)if(!A[i]) for(intJ=i;j;j-=l (j))//enumeration of each of the state I 1{f[i][a[l (j)]]=inf;//Update this status for(intK=i-l (j); k;k-=L (k)) F[i][a[l (j)]=min (F[i][a[l (j)]],f[i-l (j)][a[l (k)]]+G[a[l (j)]][a[l (k)]); } for(intI=1; i<=n;i++) ans=min (ans,f[(1<<n)-1][i]); printf ("%.2f\n", ans); return 0;}
COGS line-type network (pressure DP)