Advertisement
vermashubhang

ASSIGN (SPOJ)

Oct 23rd, 2014
528
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.05 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #include <stdio.h>
  3. using namespace std;
  4.  
  5. int n,a;
  6. int ans;
  7. int  array [24 ][24];
  8. long long  Dp[1<<21];
  9.  
  10. long long bitmask(int mask)
  11. {
  12.     int index  =__builtin_popcount(mask);
  13.     if(index==n)
  14.     {
  15.         if((1<<n)-1 == mask)
  16.             return  1 ;
  17.         return 0;
  18.     }
  19.     else if(Dp[mask]!=-1)
  20.         return Dp[mask];
  21.     long long  ans=0;
  22.     for(int i=0; i<n; i++)
  23.     {
  24.         if(array[index][i])
  25.             if(!(mask & (1<<i)))
  26.                 ans+=bitmask(mask|(1<<i));
  27.  
  28.     }
  29.     return Dp[mask]=ans;
  30. }
  31. int main()
  32. {
  33.  
  34.     int t;
  35.     cin >> t;
  36.     while(t--)
  37.     {
  38.         cin >> n;
  39.         for(int i=0; i<n; i++)
  40.             for(int j=0; j<n; j++)
  41.                 array[i][j]=0;
  42.  
  43.         for(int i=0; i<(1<<n); i++)
  44.             Dp[i]=-1;
  45.  
  46.         for(int i=0; i<n; i++)
  47.             for(int j=0; j<n; j++)
  48.             {
  49.                 cin >> a;
  50.                 if(a)
  51.                     array[i][j]=1;
  52.             }
  53.         cout << bitmask(0) << endl;
  54.     }
  55.  
  56.     return 0;
  57. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement