nrk009

TSP

Feb 8th, 2020
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.75 KB | None | 0 0
  1.  
  2. #include<bits/stdc++.h>
  3. using namespace std;
  4.  
  5. #define fast ios_base::sync_with_stdio(0);cin.tie(NULL);cout.tie(NULL)
  6. #define ll long long
  7. #define ld long double
  8. #define pb push_back
  9. #define fe first
  10. #define se second
  11. #define nl "\n"
  12. #define pp pair < ll , ll >
  13. #define sz(x) (ll)x.size()
  14. #define st(x) sort(x.begin(),x.end())
  15. #define rst(x) sort(x.rbegin(), x.rend())
  16. #define all(x) x.begin(),x.end()
  17. long double pi = 3.14159265358979323;
  18.  
  19. const double EPS = 1e-12;
  20. const int N = 18;
  21. const int mod = 1e9 + 7;
  22.  
  23.  
  24. int dp[1 << N][N], n, s = 1, adj[N][N];
  25.  
  26. int solve(int mask, int u)
  27. {
  28.  
  29.      //cout << mask << " ";
  30.      if(mask == (1 << n) - 1)
  31.      {
  32.        
  33.         if(adj[u][s]){
  34.             //cout << "dkjfd";
  35.             return adj[u][s];}
  36.         return mod;
  37.      }
  38.  
  39.      int& ans = dp[mask][u];
  40.      if(ans != -1)return ans;
  41.      ans = mod;
  42.      for(int i = 1; i <= n; i++)
  43.      {
  44.         if(!(mask & (1 << (i-1))) && adj[u][i])
  45.         {
  46.             int a = adj[u][i] + solve(mask | (1 << (i-1)), i);
  47.             ans = min(ans, a);
  48.         }
  49.      }
  50.      //cout << u << " " << ans << "\n";
  51.      return ans;
  52. }
  53.  
  54.  
  55.  
  56. int main()
  57. {
  58.     fast;
  59.     ll t;
  60.     cin >> t ;
  61.     while(t--){
  62.     int m,a, b, c;
  63.     cin >> n;
  64.     n++;
  65.     for(int i = 1 ; i <= n ; i++ ){
  66.         for(int j = 1 ; j <= n ; j++ ){
  67.             if(i == j)continue;
  68.             cin >> c;
  69.             adj[i][j]  = c;
  70.         }
  71.     }
  72.     /*for(int i = 1 ;  i <= n ; i++ ){
  73.         for(int j = 1 ; j <= n ;j++ ){
  74.             cout << adj[i][j] << " ";
  75.         }
  76.         cout << "\n";
  77.     }*/
  78.    
  79.     memset(dp, -1, sizeof(dp));
  80.     cout << solve(1, 1) << "\n";
  81.  
  82.     memset(adj, 0, sizeof(adj));
  83.     /*for(int i = 1 ;  i <= n ; i++ ){
  84.         for(int j = 1 ; j <= n ;j++ ){
  85.             adj[i][j] = 0;
  86.         }
  87.     }*/
  88.     }
  89.  
  90.  
  91.  
  92.  
  93.  
  94.  
  95.  
  96.  
  97.  
  98.  
  99.  
  100.  
  101.  
  102.  
  103.  
  104.  
  105.  
  106.  
  107.  
  108.  
  109.    
  110.     return 0;
  111.    
  112. }
Add Comment
Please, Sign In to add comment