Advertisement
paradox64ce

optimal

Jun 5th, 2022
954
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.53 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #include <iostream>
  3.  
  4. using namespace std;
  5.  
  6. int dist(const pair<int, int> &a, const pair<int, int> &b)
  7. {
  8.     return abs(a.first - b.first) + abs(a.second - b.second);
  9. }
  10.  
  11. int solve(int n, pair<int, int> home, pair<int, int> office, vector<pair<int, int>> cust)
  12. {
  13.     vector<pair<int, pair<int, int>>> dp((1 << n));
  14.     dp[0] = {0, office};
  15.  
  16.     for (int mask = 1; mask < (1 << n); mask++)
  17.     {
  18.         dp[mask] = {INT_MAX, {-1, -1}};
  19.     }
  20.  
  21.     for (int mask = 0; mask < (1 << n); mask++)
  22.     {
  23.         for (int j = 0; j < n; j++)
  24.         {
  25.             if ((mask & (1 << j)) == 0)
  26.             {
  27.                 // j is not in mask
  28.  
  29.                 pair<int, int> last = dp[mask].second;
  30.                 int cur_dist = dp[mask].first + dist(last, cust[j]);
  31.  
  32.                 if (cur_dist < dp[mask ^ (1 << j)].first)
  33.                 {
  34.                     dp[mask ^ (1 << j)] = {cur_dist, cust[j]};
  35.                 }
  36.             }
  37.         }
  38.     }
  39.     int ans = dp[(1 << n) - 1].first + dist(dp[(1 << n) - 1].second, home);
  40.     cout << dp[(1 << n) - 1].second.first << " " << dp[(1 << n) - 1].second.second << " \n";
  41.     return ans;
  42. }
  43.  
  44. int main()
  45. {
  46.     int n;
  47.     cin >> n;
  48.     pair<int, int> home, office;
  49.     cin >> home.first >> home.second;
  50.     cin >> office.first >> office.second;
  51.     vector<pair<int, int>> v(n);
  52.     for (int i = 0; i < n; i++)
  53.     {
  54.         cin >> v[i].first >> v[i].second;
  55.     }
  56.  
  57.     int ans = solve(n, home, office, v);
  58.     cout << ans << "\n";
  59.     return 0;
  60. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement