庞果英雄会-合法字符串 复杂度 O(log(n)*log(n)*log(m))(二)

2014-11-24 07:33:45 · 作者: · 浏览: 1
1+ f(m-2,n)*58+ f(m-3,n)*20

以此类推。。。

贡献矩阵的求法:

其中贡献矩阵的第m-1列由一个等差数列和一个常数数列构成,数值上等于f(2)的前半部分

其余列g(i,j)=g(2*i,j+1)+g(2*i+1,j+1)+…+ g(n/2,j+1) (j

何时停止呢,一直到g(1,j)=0停止

这里可以通过数列递推模型把递推公式转换为矩阵,但是转换之后的矩阵规模依然难以接受,所以求解贡献矩阵还需要在思考。

根据公式[2],f(m,n)=f(m,1)+f(m-1,1)我们只关心贡献矩阵的第一行。

因此,需要消耗点脑汁,做一点转换:

把贡献矩阵的第m-1列,转换为两个等差数列相减,

如[1 3 5 5 5] = [1 3 5 7 9] - [0 0 0 2 4]

然后对两个等差数列单独求贡献矩阵,把求解结果的第一行做差就是我们需要的结果。

最后一步

贡献矩阵g的最后一列是等差数列,如何求解g的第一行?【数列递推模型】

a(n)表示数列的通项,s(n)是前n项和。

[1,a(n-1), s(n-2)] * C = [1, a(n), s(n-1)] 递推式(1)

当数列a(n)是等差数列时,若 a(n)=a+(n-1)*d

C=[1 0 0;d 1 0;0 1 1]

则递推式(1)就是等差数列的表达,[1,a,0]*C^(n/2)则可求解第m-1列的第一行的元素。

有了s(n) 和a(n) ,求解第m-2列会方便很多,同样是构造递推矩阵。

即,根据求解第m-1列递推矩阵构造求解第m-2的递推矩阵。D=C*C U [0,…., 1 , 1]

以此类推,经过r次构造就可以求解贡献矩阵。