Guest User

Untitled

a guest
Jun 25th, 2020
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.94 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define int long long
  4. int btod(string number)
  5. {
  6.    
  7.     int base=1;
  8.     int dec=0;
  9.     int i=number.length()-1;
  10.     while(i>=0)
  11.     {
  12.         int rem=number[i]-'0';
  13.         dec+=rem*base;
  14.         base=base*2;
  15.         i--;
  16.     }
  17.     return dec;
  18. }
  19. int findans(vector<vector<int>> v,vector<int>& check,int cnt,int i,int j,vector<int>& dp)
  20. {
  21.     if(cnt==v.size() && i==-1)
  22.     {
  23.         return 1;
  24.     }
  25.     if(j<0)
  26.     {
  27.         return 0;
  28.     }
  29.  
  30.     int value=-1;
  31.     int number=0;
  32.     string val="";
  33.     if(v[i][j] && !check[j])
  34.     {
  35.         //cout<<"For i = "<<i<<" and j = "<<j<<endl;
  36.         check[j]=1;
  37.         for(int k=0;k<check.size();k++)
  38.         {
  39.             char c='0'+check[k];
  40.             val+=c;
  41.             //cout<<c<<" ";
  42.         }
  43.         //cout<<endl;
  44.        // cout<<"Number = "<<number<<endl;
  45.         check[j]=0;
  46.         value=btod(val);
  47.         //cout<<value<<endl;
  48.     }
  49.     if(dp[value]!=-1 && value!=-1)
  50.     {
  51.         return dp[value];
  52.     }
  53.     if(v[i][j]==1 && check[j]!=1)
  54.     {
  55.         check[j]=1;
  56.         int sum=findans(v,check,cnt+1,i-1,v.size()-1,dp);
  57.         check[j]=0;
  58.        // cout<<"Sum is "<<sum<<endl;
  59.         return dp[value]=sum+findans(v,check,cnt,i,j-1,dp);
  60.     }
  61.     return findans(v,check,cnt,i,j-1,dp);
  62. }
  63. int32_t main()
  64. {
  65.     clock_t tStart = clock();
  66.     int t;
  67.     cin>>t;
  68.     while(t--)
  69.     {
  70.         int n;
  71.         cin>>n;
  72.         vector<vector<int>> v(n,vector<int>(n,0));
  73.         for(int i=0;i<n;i++)
  74.         {
  75.             for(int j=0;j<n;j++)
  76.             {
  77.                 int x;
  78.                 cin>>x;
  79.                 v[i][j]=x;
  80.             }
  81.         }
  82.         vector<int> check(n,0);
  83.         vector<int> dp(10000000,-1);
  84.         int ans=findans(v,check,0,v.size()-1,v.size()-1,dp);
  85.         cout<<ans<<endl;
  86.         printf("Time taken: %.2fs\n", (double)(clock() - tStart)/CLOCKS_PER_SEC);
  87.     }
  88. }
Add Comment
Please, Sign In to add comment