Josif_tepe

Untitled

Mar 11th, 2026
196
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.11 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <algorithm>
  4. #include <set>
  5. #include <cstring>
  6. using namespace std;
  7. typedef long long ll;
  8. const int maxn = 21;
  9. const int MOD = 1e9 + 7;
  10. int n;
  11. int mat[maxn][maxn];
  12. int dp[maxn][1 << maxn];
  13.  
  14. int rec(int at, int women_taken) {
  15.     if(__builtin_popcount(women_taken) == n) {
  16.         return 1;
  17.     }
  18.     if(at >= n) {
  19.         return 0;
  20.     }
  21.     if(dp[at][women_taken] != -1) {
  22.         return dp[at][women_taken];
  23.     }
  24.    
  25.     int res = 0;
  26.    
  27.     for(int i = 0; i < n; i++) {
  28.         if(mat[at][i] == 1) {
  29.             if((women_taken & (1 << i)) == 0) {
  30.                 int new_taken = (women_taken | (1 << i));
  31.                 res += rec(at + 1, new_taken);
  32.                 res %= MOD;
  33.             }
  34.         }
  35.     }
  36.     dp[at][women_taken] = res;
  37.     return res;
  38. }
  39. int main()
  40. {
  41.     ios_base::sync_with_stdio(false);
  42.     memset(dp, -1, sizeof dp);
  43.     cin >> n;
  44.    
  45.     for(int i = 0; i < n; i++) {
  46.         for(int j = 0; j < n; j++) {
  47.             cin >> mat[i][j];
  48.         }
  49.     }
  50.    
  51.     cout << rec(0, 0) << endl;
  52.     return 0;
  53. }
  54.  
Advertisement
Add Comment
Please, Sign In to add comment