fork download
  1. cache=dict()
  2. cache[(0,0,0)]=1
  3.  
  4. def cnt(a):
  5. try:
  6. return cache[a]
  7. except KeyError:
  8. pass
  9. s = 0
  10. for i in range(len(a)):
  11. sgn = 1
  12. aa = list(a)
  13. for j in range(a[i]):
  14. aa[i] -= 1
  15. s += sgn*cnt(tuple(aa))
  16. sgn = -sgn
  17. cache[a] = s
  18. print("C%r &= %d \\\\" % (a, s))
  19. return s
  20.  
  21. print(cnt((3, 2, 2)))
  22.  
Success #stdin #stdout 0.01s 7728KB
stdin
Standard input is empty
stdout
C(0, 0, 1) &= 1 \\
C(0, 0, 2) &= 0 \\
C(0, 1, 0) &= 1 \\
C(0, 1, 1) &= 2 \\
C(0, 1, 2) &= 1 \\
C(0, 2, 0) &= 0 \\
C(0, 2, 1) &= 1 \\
C(0, 2, 2) &= 2 \\
C(1, 0, 0) &= 1 \\
C(1, 0, 1) &= 2 \\
C(1, 0, 2) &= 1 \\
C(1, 1, 0) &= 2 \\
C(1, 1, 1) &= 6 \\
C(1, 1, 2) &= 6 \\
C(1, 2, 0) &= 1 \\
C(1, 2, 1) &= 6 \\
C(1, 2, 2) &= 12 \\
C(2, 0, 0) &= 0 \\
C(2, 0, 1) &= 1 \\
C(2, 0, 2) &= 2 \\
C(2, 1, 0) &= 1 \\
C(2, 1, 1) &= 6 \\
C(2, 1, 2) &= 12 \\
C(2, 2, 0) &= 2 \\
C(2, 2, 1) &= 12 \\
C(2, 2, 2) &= 30 \\
C(3, 0, 0) &= 0 \\
C(3, 0, 1) &= 0 \\
C(3, 0, 2) &= 1 \\
C(3, 1, 0) &= 0 \\
C(3, 1, 1) &= 2 \\
C(3, 1, 2) &= 10 \\
C(3, 2, 0) &= 1 \\
C(3, 2, 1) &= 10 \\
C(3, 2, 2) &= 38 \\
38