传送门

 

深搜加剪纸可A(O(玄学) 1274ms)

——代码

 1 #include <cmath>
 2 #include <cstdio>
 3 #include <iostream>
 4 
 5 int n;
 6 double ans = ~(1 << 31), a[16], b[16];
 7 bool vis[16];
 8 
 9 inline double min(double x, double y)
10 {
11     return x < y ? x : y;
12 }
13 
14 inline double query(int x, int y)
15 {
16     return sqrt((a[x] - a[y]) * (a[x] - a[y]) + (b[x] - b[y]) * (b[x] - b[y]));
17 }
18 
19 inline void dfs(int now, double sum, int k)
20 {
21     if(k == n + 1)
22     {
23         ans = min(ans, sum);
24         return;
25     }
26     if(sum > ans) return;
27     for(int i = 1; i <= n; i++)
28         if(!vis[i])
29         {
30             vis[i] = 1;
31             dfs(i, sum + query(now, i), k + 1);
32             vis[i] = 0;
33         }
34 }
35 
36 int main()
37 {
38     scanf("%d", &n);
39     for(int i = 1; i <= n; i++) scanf("%lf %lf", &a[i], &b[i]);
40     dfs(0, 0, 1);
41     printf("%.2lf\n", ans);
42     return 0;
43 }
View Code

相关文章: