Advertisement
mickypinata

GRD3-T16: Mr Robot

Nov 27th, 2020
149
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.96 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. typedef pair<int, int> pii;
  5.  
  6. const int K = 10;
  7.  
  8. pii pos[K + 1];
  9. int dp[K + 1][1 << (K + 1)];
  10. int row, col, nPoint;
  11.  
  12. int distPoint(int i, int j){
  13.     return abs(pos[i].first - pos[j].first) + abs(pos[i].second - pos[j].second);
  14. }
  15.  
  16. int dpTopDown(int u, int bitMask){
  17.     if(bitMask == (1 << (nPoint + 1)) - 1){
  18.         return distPoint(u, 0);
  19.     }
  20.     if(dp[u][bitMask] != 0){
  21.         return dp[u][bitMask];
  22.     }
  23.     int mn = 1e9;
  24.     for(int v = 0; v <= nPoint; ++v){
  25.         if(v != u && (bitMask & (1 << v)) == 0){
  26.             mn = min(mn, distPoint(u, v) + dpTopDown(v, (bitMask | (1 << v))));
  27.         }
  28.     }
  29.     return dp[u][bitMask] = mn;
  30. }
  31.  
  32. int main(){
  33.  
  34.     scanf("%d %d %d %d %d", &row, &col, &pos[0].first, &pos[0].second, &nPoint);
  35.     for(int i = 1; i <= nPoint; ++i){
  36.         scanf("%d %d", &pos[i].first, &pos[i].second);
  37.     }
  38.  
  39.     cout << dpTopDown(0, 1);
  40.  
  41.     return 0;
  42. }
  43.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement