class Solution:
    def canIWin(self, maxChoosableInteger: int, desiredTotal: int) -> bool:
      if desiredTotal==0:
        return True  
      dp=[False for _ in range(1<<maxChoosableInteger)]
    
      for i in range((1<<maxChoosableInteger)-1,-1,-1):
        s=0
        for j in range(maxChoosableInteger):
          if ((i>>j)&1)==1:
            s+=(j+1)
        if s>=desiredTotal:
          dp[i]=False
          continue
        for j in range(maxChoosableInteger):
          if ((i>>j)&1)==0 and dp[i+(1<<j)]==False:
            dp[i]=True
        
      return dp[0]

# your code goes here