K (k, n) - n, k. K (k, n + 1) = sum (K (i, n)), , k.
; , O (n) O (1) :
jumpMap = [map(int, x) for x in '46,68,79,48,039,,017,26,13,24'.split(',')]
def jumps(n):
K = [1] * 10
for _ in xrange(n):
K = [sum(K[j] for j in jumpMap[i]) for i in xrange(10)]
return sum(K)
for i in xrange(10):
print i, jumps(i)
: log (n) O (1) . M - 10 10 M [i, j] = 1, j 0 . (M ^ n * (10, 1)) . log (n) . numpy:
jumpMap = [map(int, x) for x in '46,68,79,48,039,,017,26,13,24'.split(',')]
M = numpy.matrix([[1 if j in jumpMap[i] else 0 for j in xrange(10)] for i in xrange(10)])
def jumps_mat(n):
return sum(M ** n * numpy.ones((10, 1)))[0,0]
for i in xrange(10):
print i, jumps_mat(i)