Advertisement
urmisaha

Samsung-Mr. Kim - TSP

Nov 6th, 2019
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.05 KB | None | 0 0
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. // Input:
  5. // 5 0 0 100 100 70 40 30 10 10 5 90 70 50 20
  6. // 10 39 9 97 61 35 93 62 64 96 39 36 36 9 59 59 96 61 7 64 43 43 58 1 36
  7.  
  8. // Output:
  9. // 200
  10. // 366
  11.  
  12. int n, ALL;
  13. int x[15], y[15];
  14. int dp[2050][15];
  15.  
  16. int dist(int i, int j){
  17.     int sum = 0;
  18.     sum += (x[i] > x[j]) ? (x[i] - x[j]): (x[j] - x[i]);
  19.     sum += (y[i] > y[j]) ? (y[i] - y[j]): (y[j] - y[i]);
  20.     return sum;
  21. }
  22.  
  23. int tsp(int mask, int pos){
  24.     if(mask == ALL)
  25.         return dist(pos, n);
  26.     if(dp[mask][pos] == -1){
  27.         int ans = 9999;
  28.         for(int i=1; i<n; ++i){
  29.             if((mask & (1<<i)) == 0){
  30.                 ans = min(ans, dist(pos, i) + tsp((mask | (1<<i)), i));
  31.             }
  32.         }
  33.         dp[mask][pos] = ans;
  34.     }
  35.     return dp[mask][pos];
  36. }
  37.  
  38. int main() {
  39.     cin>>n;
  40.     cin>>x[0]>>y[0];
  41.     cin>>x[n+1]>>y[n+1];
  42.     for(int i=1; i<=n; ++i)
  43.         cin>>x[i]>>y[i];
  44.     for(int i=0; i<2050; ++i)
  45.         for(int j=0; j<15; ++j)
  46.             dp[i][j] = -1;
  47.     n++;
  48.     ALL = (1<<n)-1;
  49.     cout<<tsp(1, 0);
  50.     return 0;
  51. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement