Saleh127

Light OJ 1119 / Bitmask DP

Jan 27th, 2022
971
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.33 KB | None | 0 0
  1. /***
  2.  created: 2022-01-27-19.27.38
  3. ***/
  4.  
  5. #include <bits/stdc++.h>
  6. using namespace std;
  7. #define ll long long
  8. #define test int tt; cin>>tt; for(int cs=1;cs<=tt;cs++)
  9. #define get_lost_idiot return 0
  10. #define nl '\n'
  11.  
  12. ll Set(ll N,ll pos){return N=N |(1<<pos);}
  13. ll reset(ll N,ll pos){return N= N & ~(1<<pos);}
  14. bool check(ll N,ll pos){return (bool)(N & (1<<pos));}
  15. ll n,a[16][16];
  16. ll dp[(1<<14)+5];
  17.  
  18. ll solve(ll mask)
  19. {
  20.      if(mask==(1<<n)-1) return 0;
  21.      if(dp[mask]!=-1) return dp[mask];
  22.  
  23.      ll ans=1e16;
  24.  
  25.      for(ll i=0;i<n;i++)
  26.      {
  27.           if(check(mask,i)==0)
  28.           {
  29.                ll p=a[i][i];
  30.  
  31.                for(ll j=0;j<n;j++)
  32.                {
  33.                     if(i!=j && check(mask,j)==0)
  34.                     {
  35.                          p+=a[i][j];
  36.                     }
  37.                }
  38.                ll x=p+solve(Set(mask,i));
  39.                ans=min(ans,x);
  40.           }
  41.      }
  42.  
  43.      return dp[mask]=ans;
  44. }
  45.  
  46. int main()
  47. {
  48.    ios_base::sync_with_stdio(0);
  49.    cin.tie(0);cout.tie(0);
  50.  
  51.  
  52.    test
  53.    {
  54.         cin>>n;
  55.  
  56.         for(ll i=0;i<n;i++)
  57.         {
  58.              for(ll j=0;j<n;j++)
  59.              {
  60.                   cin>>a[i][j];
  61.              }
  62.         }
  63.  
  64.         memset(dp,-1,sizeof dp);
  65.  
  66.         cout<<"Case "<<cs<<": "<<solve(0)<<nl;
  67.    }
  68.  
  69.  
  70.    get_lost_idiot;
  71. }
  72.  
Advertisement
Add Comment
Please, Sign In to add comment