prob.py

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#!/usr/bin/python

d = [0]*11
for i in range(11):
    d[i] = [0]*61

for i in range(1, 7):
    d[1][i] = 1

for n in range(2, 11):
    for k in range(n, n*6+1):
        d[n][k] = sum(d[n-1][max(0, k-6):k])

print(6**15)
s = sum([d[5][k]*sum(d[10][10:k]) for k in range(11, 31)])
print(s)
print(s/6**15)

################################################################################

## use multinomial coefficients
from math import factorial
import itertools

def fd(n, k):
    return sum([factorial(n)/factorial(t.count(1))/factorial(t.count(2))/factorial(t.count(3))/factorial(t.count(4))/factorial(t.count(5))/factorial(t.count(6))
                for t in itertools.combinations_with_replacement([1, 2, 3, 4, 5, 6], n)
                if sum(t) == k])

## test
# for n in range(1, 11):
#     print(d[n])
#     print([int(fd(n, k)) for k in range(61)])