Advertisement
Saleh127

Light OJ 1057 / Bitmask DP

Jan 27th, 2022
842
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.57 KB | None | 0 0
  1. /***
  2.  created: 2022-01-27-13.54.00
  3. ***/
  4.  
  5. #include <bits/stdc++.h>
  6. using namespace std;
  7. #define ll int
  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. vector<pair<ll,ll>>x;
  16. ll sz,k,l;
  17.  
  18. ll dp[21][21][(1<<15)+2];
  19.  
  20. ll solve(ll xx,ll yy,ll mask)
  21. {
  22.      if(mask==(1<<sz)-1)
  23.      {
  24.           return  max(abs(k-xx),abs(l-yy));
  25.      }
  26.  
  27.      if(dp[xx][yy][mask]!=-1) return dp[xx][yy][mask];
  28.  
  29.      ll ans=INT_MAX;
  30.  
  31.      for(ll i=0;i<sz;i++)
  32.      {
  33.           if(check(mask,i)==0)
  34.           {
  35.                ans=min(ans,max(abs(xx-x[i].first),abs(yy-x[i].second))+solve(x[i].first,x[i].second,Set(mask,i)));
  36.           }
  37.      }
  38.  
  39.      return dp[xx][yy][mask]=ans;
  40. }
  41.  
  42. int main()
  43. {
  44.    ios_base::sync_with_stdio(0);
  45.    cin.tie(0);cout.tie(0);
  46.  
  47.    test
  48.    {
  49.         ll n,m,i,j;
  50.  
  51.         cin>>n>>m;
  52.  
  53.         char c;
  54.  
  55.         for(i=0;i<n;i++)
  56.         {
  57.              for(j=0;j<m;j++)
  58.              {
  59.                   cin>>c;
  60.                   if(c=='x')
  61.                   {
  62.                        k=i;
  63.                        l=j;
  64.                   }
  65.                   else if(c=='g')
  66.                   {
  67.                        x.push_back({i,j});
  68.                   }
  69.              }
  70.         }
  71.         memset(dp,-1,sizeof dp);
  72.         sz=x.size();
  73.  
  74.         cout<<"Case "<<cs<<": "<<solve(k,l,0)<<nl;
  75.  
  76.         x.clear();
  77.    }
  78.  
  79.    get_lost_idiot;
  80. }
  81.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement