Advertisement
Jasir

Bit manipulation

Dec 21st, 2018
134
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.15 KB | None | 0 0
  1. int Set(int N,int pos){return N=N | (1<<pos);}
  2. int reset(int N,int pos){return N= N & ~(1<<pos);}
  3. bool check(int N,int pos){return (bool)(N & (1<<pos));}
  4. void Sos(){
  5.     //Brute Force
  6.     for(int mask = 0;mask < (1<<N); ++mask){
  7.         for(int i = 0;i < (1<<N); ++i){
  8.             if((mask&i) == i){
  9.                 F[mask] += A[i];
  10.             }
  11.         }
  12.     }
  13.     //Suboptimal Solution
  14.  
  15.     // iterate over all the masks
  16.     for (int mask = 0; mask < (1<<n); mask++){
  17.         F[mask] = A[0];
  18.         // iterate over all the subsets of the mask
  19.         for(int i = mask; i > 0; i = (i-1) & mask){
  20.             F[mask] += A[i];
  21.         }
  22.     }
  23.     //iterative version
  24.     for(int mask = 0; mask < (1<<N); ++mask){
  25.         dp[mask][-1] = A[mask]; //handle base case separately (leaf states)
  26.         for(int i = 0;i < N; ++i){
  27.             if(mask & (1<<i))
  28.                 dp[mask][i] = dp[mask][i-1] + dp[mask^(1<<i)][i-1];
  29.             else
  30.                 dp[mask][i] = dp[mask][i-1];
  31.         }
  32.         F[mask] = dp[mask][N-1];
  33.     }
  34.  
  35.     //memory optimized, super easy to code.
  36.     for(int i = 0; i<(1<<N); ++i)
  37.         F[i] = A[i];
  38.     for(int i = 0;i < N; ++i) for(int mask = 0; mask < (1<<N); ++mask){
  39.         if(mask & (1<<i))
  40.             F[mask] += F[mask^(1<<i)];
  41.     }
  42. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement