Advertisement
AlexG2230954

Untitled

Mar 25th, 2022
125
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.39 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3.  
  4. using namespace std;
  5.  
  6. // можно ли добавить следующий столбец на основании прошлого
  7. bool compatible(int a, int b, int m) {
  8.     vector<bool> good(m);
  9.     int bit1, bit2;
  10.  
  11.     for(int i = 0; i < m; i++)
  12.         good[i] = (a & (1 << i)) != 0;
  13.  
  14.     for(int i = 0; i < m; i++) {
  15.         bit1 = a & (1 << i);
  16.         bit2 = b & (1 << i);
  17.  
  18.         if(bit1 && bit2) return false;
  19.         if(bit1 && !bit2) good[i] = true;
  20.     }
  21.  
  22.     for(int i = 0; i < m - 1; i++) {
  23.         if(!good[i] && !good[i + 1]) {
  24.             good[i] = true;
  25.             good[i + 1] = true;
  26.         }
  27.     }
  28.  
  29.     for(int i = 0; i < m; i++)
  30.         if(!good[i]) return false;
  31.  
  32.     return true;
  33. }
  34.  
  35. // генерация таблицы сравнения
  36. vector< vector<int> > generate_compare_table(int m) {
  37.     vector< vector<int> > compare_table((1 << m), vector<int>(1 << m));
  38.  
  39.     for(int a = 0; a < (1 << m); a++)
  40.         for(int b = 0; b < (1 << m); b++)
  41.             compare_table[a][b] = compatible(a, b, m);
  42.  
  43.     return compare_table;
  44. }
  45.  
  46. int main() {
  47.     int m, n;
  48.     vector< vector<int> > dp;
  49.     vector< vector<int> > can;
  50.  
  51.     cin >> m >> n;
  52.     dp.resize(n + 1, vector<int>(1 << m));
  53.     can = generate_compare_table(m);
  54.  
  55.     dp[0][0] = 1;
  56.  
  57.     for(int i = 1; i <= n; i++)
  58.         for(int a = 0; a < (1 << m); a++)
  59.             for(int b = 0; b < (1 << m); b++)
  60.                 dp[i][a] += dp[i - 1][b] * can[b][a];
  61.  
  62.     int ans = dp.back()[0];
  63.     cout << ans << endl;
  64. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement