fork download
  1. cCache = dict(((0,)*i, 1) for i in range(20))
  2. def c(a):
  3. try:
  4. return cCache[a]
  5. except KeyError:
  6. res = sum(d(i, a) for i in range(len(a)))
  7. cCache[a] = res
  8. return res
  9.  
  10. dCache = dict()
  11. def d(i, a):
  12. try:
  13. return dCache[(i, a)]
  14. except KeyError:
  15. if a[i] == 0:
  16. return 0
  17. aa = list(a)
  18. aa[i] -= 1
  19. aa = tuple(aa)
  20. res = c(aa) - d(i, aa)
  21. dCache[(i, a)] = res
  22. return res
  23.  
  24. print(c((3, 2, 2)))
  25.  
Success #stdin #stdout 0.01s 7728KB
stdin
Standard input is empty
stdout
38