P1433-吃奶酪

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 #define _for(i,a,b) for(int i = (a);i < b;i ++)
 4 typedef double db;
 5 const int maxn = 20;
 6 db rnt = 1<<30;
 7 int n;
 8 double x[maxn],y[maxn],dis[maxn][maxn];
 9 
10 double dfs(int s,db sum,int cur)
11 {
12     if(sum>rnt)
13         return 1<<30;
14     if(s==(1<<(n+1))-1)
15         rnt = min(rnt,sum);
16     
17     _for(i,0,n+1)
18         if(!((1<<i)&s))
19         {
20             s |= 1<<i;
21             dfs(s,sum+dis[cur][n-i],n-i);
22             s ^= 1<<i;
23         }
24 }
25 
26 int main()
27 {
28     scanf("%d",&n);
29     _for(i,1,n+1)
30         scanf("%lf%lf",&x[i],&y[i]);
31     x[0]=0,y[0]=0;
32     _for(i,0,n+1)
33         _for(j,0,n+1)
34             dis[i][j]=sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]));
35     
36     dfs(1<<n,0.0,0);
37     printf("%0.2f
",rnt);
38     return 0;
39 }
原文地址:https://www.cnblogs.com/Asurudo/p/11250199.html