#include<bits/stdc++.h>
using namespace std;
int n;
double loc[20][2], dp[1048575];
double GetDis(int idx0, int idx1) {
return sqrt((loc[idx0][0] - loc[idx1][0]) * (loc[idx0][0] - loc[idx1][0]) +
(loc[idx0][1] - loc[idx1][1]) * (loc[idx0][1] - loc[idx1][1]));
}
void dfs(int p, int cur) {
for (int i = 1; i <= n; ++i) {
if ((p >> i & 1)==0) {
if (dp[p | (1 << i)] > dp[p] + GetDis(i, cur)) {
dp[p | (1 << i)] = dp[p] + GetDis(i, cur);
dfs(p | (1 << i), i);
}
}
}
}
int main() {
scanf("%d", &n);
for (int i = 1; i <= n; ++i) scanf("%lf%lf", &loc[i][0], &loc[i][1]);
std::fill(dp, dp + 1048575, INT_MAX);
dp[0] = 0;
dfs(0, 0);
int m = pow(2, n + 1) - 2;
printf("%.2lf\n", dp[m]);
return 0;
}
只有五十分,大佬求助