1 #include<iostream> 2 #include<algorithm> 3 #include<cmath> 4 using namespace std; 5 6 bool s[7]; 7 double x[7], y[7], r[7], xa, ya, xb, yb, maxs; 8 int n; 9 const double PI = 3.1415926535; 10 11 void dfs(int num, double sum) 12 { 13 if (num > n) 14 { 15 maxs = max(maxs, sum); 16 return; 17 } 18 for (int i = 1; i <= n; i++) 19 { 20 if (!s[i]) 21 { 22 double s1 = min(fabs(x[i] - xa), fabs(x[i] - xb)); 23 double s2 = min(fabs(y[i] - ya), fabs(y[i] - yb)); 24 double mind = min(s1, s2); 25 for (int j = 1; j <= n; j++) 26 if (i != j && s[j]) 27 { 28 double d = sqrt((x[i] - x[j]) * (x[i] - x[j]) + (y[i] - y[j]) * (y[i] - y[j])); 29 mind = min(mind, max(d - r[j], 0.0)); 30 } 31 r[i] = mind; 32 s[i] = 1; 33 dfs(num + 1, sum + r[i] * r[i] * PI); 34 s[i] = 0; 35 } 36 } 37 } 38 int main() 39 { 40 double t; 41 cin >> n; 42 cin >> xa >> ya >> xb >> yb; 43 t = fabs(xa - xb) * fabs(ya - yb); 44 for (int i = 1; i <= n; i++) 45 cin >> x[i] >> y[i]; 46 dfs(1, 0); 47 cout << int(t - maxs + 0.5); 48 }
原文:https://www.cnblogs.com/thjkhdf12/p/11641101.html