tien_noob

Pretests

Jul 22nd, 2021 (edited)
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.95 KB | None | 0 0
  1. //Make CSP great again
  2. #include <bits/stdc++.h>
  3. #define TASK "TESTCODE"
  4. using namespace std;
  5. const int N = 20, M = 2e5;
  6. int n, m, mask[M + 1], res, dp[N + 1][1 << N], Trace[1 << N], StartMask = 0, AddToRes;
  7. char a[N][M];
  8. vector<int> Adj[N];
  9. set<int> FullAC;
  10. void read()
  11. {
  12.    cin >> m >> n;
  13.    AddToRes = 0;
  14.    StartMask = 0;
  15.    for (int i = 0; i < n; ++ i)
  16.    {
  17.        bool flag = false;
  18.        for (int j = 0; j < m; ++ j)
  19.        {
  20.            cin >> a[i][j];
  21.            if (a[i][j] == '0')
  22.            {
  23.                flag = true;
  24.                mask[j] |= 1 << i;
  25.                Adj[i].push_back(j);
  26.            }
  27.        }
  28.        if (!flag)
  29.        {
  30.            FullAC.insert(i + 1);
  31.            StartMask |= (1 << i);
  32.            AddToRes += m;
  33.        }
  34.    }
  35.    memset(dp, -1, sizeof(dp));
  36. }
  37. int f(int layer, int bitmask)
  38. {
  39.     if (bitmask == (1 << n) - 1)
  40.     {
  41.         return 0;
  42.     }
  43.     int &res = dp[layer][bitmask];
  44.     if (res != -1)
  45.     {
  46.         return res;
  47.     }
  48.     res = 1e9;
  49.     for (int i = 0; i < n ; ++ i)
  50.     {
  51.         if ((bitmask & (1 << i)) == 0)
  52.         {
  53.             for (int v : Adj[i])
  54.             {
  55.                 int add = 0;
  56.                 for (int k = 0; k < n; ++ k)
  57.                 {
  58.                     if (((mask[v] & (1 << k)) != 0) && ((bitmask & (1 << k)) == 0))
  59.                     {
  60.                         add += layer;
  61.                     }
  62.                 }
  63.                 res = min(res, f(layer + 1, bitmask | mask[v]) + add);
  64.             }
  65.         }
  66.     }
  67.     return res;
  68. }
  69. void solve()
  70. {
  71.    cout << f(1, StartMask) + AddToRes << '\n';
  72. }
  73. int main()
  74. {
  75.     ios_base::sync_with_stdio(false);
  76.     cin.tie(nullptr);
  77.     freopen(TASK".INP", "r", stdin);
  78.     //freopen(TASK".OUT", "w", stdout);
  79.     int t = 1;
  80.     bool typetest = true;
  81.     if (typetest)
  82.     {
  83.         cin >> t;
  84.     }
  85.     for (int __ = 1; __ <= t; ++ __)
  86.     {
  87.         read();
  88.         solve();
  89.     }
  90. }
  91.  
Add Comment
Please, Sign In to add comment