Advertisement
Guest User

Untitled

a guest
May 15th, 2021
46
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.09 KB | None | 0 0
  1. class Solution {
  2. public:
  3.  
  4. map<pair<int ,int> , int>dp;
  5.  
  6.  
  7. int chanceOfWinning(int maxInteger , int total , int mask){
  8.  
  9. if(total <=0) return 0 ;
  10.  
  11. if(dp.find({mask ,total}) != dp.end())return dp[{mask , total}] ;
  12.  
  13. int chanceOtherPlayer = 0;
  14.  
  15. for(int i=0; i<maxInteger ; i++){
  16. int b1 = mask & (1<<i);
  17. if(b1 == 0){
  18.  
  19.  
  20. chanceOtherPlayer |= chanceOfWinning(maxInteger , total - i-1 , mask|1<<i);
  21. }
  22. }
  23.  
  24. return dp[{mask , total}] = (chanceOtherPlayer ^ 1) ;
  25. }
  26.  
  27.  
  28.  
  29. bool canIWin(int maxChoosableInteger, int desiredTotal) {
  30.  
  31. int maxSum = (maxChoosableInteger * (maxChoosableInteger+1))/2;
  32.  
  33.  
  34. if(maxSum < desiredTotal)return false;
  35.  
  36. if(desiredTotal <= 0)return true ;
  37.  
  38. dp.clear();
  39.  
  40. return chanceOfWinning(maxChoosableInteger , desiredTotal, 0 );
  41.  
  42.  
  43.  
  44. }
  45. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement