矩阵快速幂.
最朴素的 $dp$ 是设 $f(i,j)$ 表示从出发点走到 $(i,j)$ 的方案数.有一个比较精妙的状态设计,
直接令 $f(2,1)=f(2,2)=1,f(i,j)=f(i-2,j)+f(i-1,j-1)+f(i-1,j)+f(i-1,j+1)$ .
后面三项表示从前一列转移过来的贡献,而 $f(i-2,j)$ 表示从第 $i-3,i-5\dots$ 列转移过来的贡献前缀和.
构造一个 $2n\times 2n$ 的矩阵加速转移,时间复杂度 $O(n^3\cdot \log m)$ .
需要特判 $n=1$ 以及 $m=1$ 的情况.
1 |
|