Advertisement
Emiliatan

d879

Aug 12th, 2019
140
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.44 KB | None | 0 0
  1. /* d879             */
  2. /* AC (0.5s, 636KB) */
  3. #pragma warning( disable : 4996 )
  4. #pragma GCC optimize("Ofast,unroll-loops,no-stack-protector,fast-math")
  5. #include <cstdio>
  6. #include <cstring>
  7. #include <cstdint>
  8. #include <cmath>
  9. #include <algorithm>
  10. #include <tuple>
  11. #define ios_jazz ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0)
  12.  
  13. using namespace std;
  14.  
  15. /* main code */
  16. constexpr int MAXN = 17;
  17. auto D = [](const pair<int, int>& a, const pair<int, int>& b) -> double { return sqrt((double)(a.first - b.first) * (a.first - b.first) + (a.second - b.second) * (a.second - b.second)); };
  18.  
  19. double dis[MAXN][MAXN], ans[1 << MAXN];
  20. pair<int, int> position[MAXN];
  21. int n, t = 1;
  22. char s[21];
  23.  
  24. int main()
  25. {
  26.     while (~scanf("%d", &n) && n)
  27.     {
  28.         n <<= 1;
  29.         for (int i = 0; i < n; ++i)
  30.             scanf("%s %d %d", s, &position[i].first, &position[i].second);
  31.  
  32.         for (int i = 0; i < n; ++i)
  33.             for (int j = i + 1; j < n; ++j)
  34.                 dis[j][i] = dis[i][j] = D(position[i], position[j]);
  35.  
  36.         for (int i = 1; i < (1 << n); ++i)
  37.             ans[i] = (1 << 30);
  38.  
  39.         for (int k = 0; k < (1 << n); ++k)
  40.         {
  41.             for (int i = n - 1; i >= 0; --i)
  42.             {
  43.                 if (k & (1 << i))
  44.                 {  
  45.                     for (int j = 0; j < i; ++j)
  46.                     {
  47.                         if (k & (1 << j) && dis[i][j] + ans[k ^ (1 << i) ^ (1 << j)] < ans[k])
  48.                             ans[k] = dis[i][j] + ans[k ^ (1 << i) ^ (1 << j)];
  49.                     }
  50.                     break;
  51.                 }
  52.             }
  53.         }
  54.  
  55.         printf("Case %d: %.2lf\n", t++, ans[(1 << n) - 1]);
  56.     }
  57.     return 0;
  58. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement