复健复健!考完试了,我的力量都回到我这里来吧!
题意:
给定n个长度小格子,每步可以走到-1或+1下标,不能越界。
走k步产生一个序列:
c
0
,
c
1
,
c
2
…
…
c
k
c_0,c_1,c_2……c_k
c0,c1,c2……ck对应
A
c
0
+
A
c
1
+
A
c
2
.
.
.
.
.
A_{c0}+A_{c1}+A_{c2}.....
Ac0+Ac1+Ac2.....
求所有这样序列总和。即:路径下标权值和为路径权值,求所有路径权值和
本题难以从逐个递推角度求解。我设了一些函数都难以处理这个状态的转移。最后设了一个:
f
(
i
,
j
)
f( i, j )
f(i,j)表示:从下标i出发走j步的不同路径方案数;
然后发现一个问题:起点终点是完全可逆的,也就是说这个函数可以理解为:从不同地方走到下标i位置的不同路径方案数。于是乎:
i被踩了多少次? 等于任何地方路过i的次数设g 表示从不同地方走到下标i的不同路径方案数,有f(i,g)方案数,剩下的k-g步,如何消耗,仍采用f(i,k-g),于是:
c
n
t
i
=
∑
j
=
0
k
f
(
i
,
j
)
∗
f
(
i
,
k
−
j
)
cnt_i = \sum_{j=0}^{k}f(i,j)*f(i,k-j)
cnti=∑j=0kf(i,j)∗f(i,k−j)
表示下标i 访问次数。整体时间复杂度为nk;