80 分,2个WA
#include <bits/stdc++.h>
#pragma GCC optimize(2)
using namespace std;
const int INF = 0x7f7f7f7f;
double xx[105], yy[105], ans = INF;
bool vis[1005];
int n;
double dis(double x1, double y1, double x2, double y2)
{
return sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));
}
void dfs(double x, double y, double sum, int lft)
{
if (sum >= ans) return;
if (lft == 0)
{
ans = min(ans, sum);
return;
}
double minn = INF;
for (int i = 1; i <= n; i++)
if (!vis[i])
minn = min(minn, dis(x, y, xx[i], yy[i]));
for (int i = 1; i <= n; i++)
if (!vis[i] && dis(x, y, xx[i], yy[i]) == minn)
{
vis[i] = 1;
dfs(xx[i], yy[i], sum + minn, lft - 1);
vis[i] = 0;
}
}
int main()
{
scanf("%d", &n);
for (int i = 1; i <= n; i++)
scanf("%lf%lf", &xx[i], &yy[i]);
dfs(0, 0, 0, n);
printf("%.2lf", ans);
return 0;
}