Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #include <stdio.h>
- using namespace std;
- int n,a;
- int ans;
- int array [24 ][24];
- long long Dp[1<<21];
- long long bitmask(int mask)
- {
- int index =__builtin_popcount(mask);
- if(index==n)
- {
- if((1<<n)-1 == mask)
- return 1 ;
- return 0;
- }
- else if(Dp[mask]!=-1)
- return Dp[mask];
- long long ans=0;
- for(int i=0; i<n; i++)
- {
- if(array[index][i])
- if(!(mask & (1<<i)))
- ans+=bitmask(mask|(1<<i));
- }
- return Dp[mask]=ans;
- }
- int main()
- {
- int t;
- cin >> t;
- while(t--)
- {
- cin >> n;
- for(int i=0; i<n; i++)
- for(int j=0; j<n; j++)
- array[i][j]=0;
- for(int i=0; i<(1<<n); i++)
- Dp[i]=-1;
- for(int i=0; i<n; i++)
- for(int j=0; j<n; j++)
- {
- cin >> a;
- if(a)
- array[i][j]=1;
- }
- cout << bitmask(0) << endl;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement