Last updated 6 years ago
在nnn行mmm列的二维矩阵上从左上角移动到右下角[1,1]→[n,m][1,1] \rightarrow [n,m][1,1]→[n,m],每次移动只能向右/向下移动。求有多少种不同的路径。
设f(i,j)f(i,j)f(i,j)为从[1,1][1,1][1,1]到[i,j][i,j][i,j]的不同路径的数量,其中i∈[1,n],j∈[1,m]i \in [1,n], j \in [1,m]i∈[1,n],j∈[1,m]。因此有如下状态转移方程:
(1)(1)(1) 初始化,设f(1,1)=1f(1,1) = 1f(1,1)=1,认为从[1,1][1,1][1,1]到[1,1][1,1][1,1]的路径有1条,实际编码是设f(0,1)=f(1,0)=f(1,1)=1f(0,1)=f(1,0)=f(1,1)=1f(0,1)=f(1,0)=f(1,1)=1;
(2)(2)(2) 对于节点[i,j][i,j][i,j],既可以从上方[i,j−1][i,j-1][i,j−1]过来,也可以从左方[i−1,j][i-1,j][i−1,j]过来。因此f(i,j)=f(i−1,j)+f(i,j−1)f(i,j) = f(i-1,j)+f(i,j-1)f(i,j)=f(i−1,j)+f(i,j−1);
f(n,m)f(n,m)f(n,m)即为从[1,1][1,1][1,1]到[n,m][n,m][n,m]的不同路径的数量。该算法的时间复杂度是O(n×m)O(n \times m)O(n×m)。