fork download
  1.  
  2. from collections import defaultdict
  3. def fnc(b, r, w):
  4. n = b+r+w
  5. mp = defaultdict(int)
  6. mp[(0, 0, 0, 9)] = 1 #(黒の数,赤の数,白の数,最後の色) := 通り数
  7. for _i in range(n):
  8. nmp = defaultdict(int)
  9. for (kb,kr,kw,kc), v in mp.items():
  10. if kc != 0 and kb < b:
  11. nmp[(kb+1, kr, kw, 0)] += v
  12. if kc != 1 and kr < r:
  13. nmp[(kb, kr+1, kw, 1)] += v
  14. if kw < w:
  15. nmp[(kb, kr, kw+1, 2)] += v
  16. mp = nmp
  17. return sum((v for v in mp.values()))
  18.  
  19. indt = ((1,2,2), (1,2,3), (3,4,5), (12,34,56) )
  20. for dt in indt:
  21. print(*dt, "-->", fnc(*dt))
  22.  
Success #stdin #stdout 0.09s 9952KB
stdin
Standard input is empty
stdout
1 2 2 --> 18
1 2 3 --> 40
3 4 5 --> 4326
12 34 56 --> 138961718287080638152811314224672