tien_noob

fking dp bitmask

May 6th, 2021 (edited)
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.35 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. const int N = 1 << 16;
  4. int c[17][17], n, dp[N + 1][17], ans = 1e9;
  5. void read()
  6. {
  7.     cin >> n;
  8.     for (int i = 0; i < n; ++ i)
  9.     {
  10.         for (int j = 0; j < n; ++ j)
  11.         {
  12.             cin >> c[i][j];
  13.         }
  14.     }
  15.     for (int i = 0; i < (1 << n); ++ i)
  16.     {
  17.         for (int j = 0; j < n; ++ j)
  18.         {
  19.             dp[i][j] = 1e9;
  20.         }
  21.     }
  22.     for (int i = 0; i < n; ++ i)
  23.     {
  24.         dp[1 << i][i] = 0;
  25.     }
  26. }
  27. void solve()
  28. {
  29.    for (int i = 1; i < (1 << n); ++ i)
  30.    {
  31.        for (int j = 0; j < n; ++ j)
  32.        {
  33.            if (!(i & (1 << j)))
  34.            {
  35.                for (int k = 0; k < n; ++ k)
  36.                {
  37.                    if (i & (1 << k))
  38.                    {
  39.                        dp[i | (1 << j)][j] = min(dp[i | (1 << j)][j], dp[i][k] + c[k][j]);
  40.                    }
  41.                }
  42.            }
  43.        }
  44.    }
  45.    for (int i = 0; i < n; ++ i)
  46.    {
  47.        ans = min(ans, dp[(1 << n) - 1][i]);
  48.    }
  49.    cout << ans;
  50. }
  51. int main()
  52. {
  53.    ios_base::sync_with_stdio(false);
  54.    cin.tie(nullptr);
  55.    //freopen(task".INP", "r", stdin);
  56.    //freopen(task".OUT", "w", stdout);
  57.    int t = 1;
  58.    bool typetest = false;
  59.    if (typetest)
  60.    {
  61.       cin >> t;
  62.    }
  63.    for (int __ = 1; __ <= t; ++ __)
  64.    {
  65.       read();
  66.       solve();
  67.    }
  68. }
Add Comment
Please, Sign In to add comment