Представьте, что у вас есть танцевальный робот в n
-мерном евклидовом пространстве, начиная с начала P_0
= (0,0,...,0)
.
Робот может сделать m
типы танцевальных движений D_1, D_2, ..., D_m
D_i
является n
-вектором целых чисел (D_i_1, D_i_2, ..., D_i_n)
Если робот делает танец движением i
, чем его положение изменяется на D_i
:
P_{t+1} = P_t + D_i
Робот может сделать любой из танцевальных движений столько раз, сколько он хочет и в любом порядке.
Пусть k-танец определяется как последовательность k шагов танца.
Ясно, что существуют m^k
возможные k-танцы.
Нам интересно узнать множество возможных конечных положений k-танца, а для каждой конечной позиции, сколько k-танцев заканчивается в этом месте.
Один из способов сделать это:
P0 = (0, 0, ..., 0);
S[0][P0] = 1
for I in 1 to k
for J in 1 to m
for P in S[I-1]
S[I][P + D_J] += S[I][P]
Теперь S[k][Q]
расскажет вам, сколько k-танцев заканчивается в позиции Q
Предположим, что n
, m
, |D_i|
малы (меньше 5), а k
меньше 40.
Есть ли более быстрый способ? Можно ли как-то вычислить S[k][Q]
"каким-то образом связанным с линейной алгеброй трюком? или какой-либо другой подход?