fork download
  1. def memoizedSubset(target, numberList, memo):
  2. ''' Returns True if there exists a subset of numberList that adds
  3. up to target and returns False otherwise.'''
  4. if target == 0:
  5. return True;
  6. elif numberList == ():
  7. return False;
  8. elif (target, numberList) in memo:
  9. return memo[(target, numberList)];
  10. elif numberList[0] > target:
  11. solution = memoizedSubset(target, numberList[1:], memo);
  12. memo[(target, numberList)] = solution;
  13. return solution;
  14. else:
  15. useIt = memoizedSubset(target - numberList[0], numberList, memo);
  16. loseIt = memoizedSubset(target, numberList[1:], memo);
  17. solution = useIt or loseIt;
  18. memo[(target, numberList)] = solution;
  19. return solution;
  20.  
  21. print(memoizedSubset(50, (2, 3, 5), {}));
Success #stdin #stdout 0.02s 28384KB
stdin
Standard input is empty
stdout
True