C++ 如何以低于指数的时间复杂度从左上到右下找到矩阵中路径的乘积?

C++ 如何以低于指数的时间复杂度从左上到右下找到矩阵中路径的乘积?,c++,algorithm,matrix,C++,Algorithm,Matrix,如果我们只能向右或向下移动,如何有效地找到从mat[0][0]到达mat[r-1][c-1]的路径乘积?15->8->9和product=1*2*5*8*9=720。MxN矩阵的路径数为 / (M-1) (N-1) \ / (M-1) (N-1) \ | | = | | \ M-1 / \ N-1 / 对于一篇可访问的论文,请看一看用于解决该问题的众多网络资源之一,例如 基本直觉是

如果我们只能向右或向下移动,如何有效地找到从mat[0][0]到达mat[r-1][c-1]的路径乘积?15->8->9和product=1*2*5*8*9=720。

MxN矩阵的路径数为

 / (M-1) (N-1) \      / (M-1) (N-1) \
|               | =  |               |
 \     M-1     /      \     N-1     /
对于一篇可访问的论文,请看一看用于解决该问题的众多网络资源之一,例如

基本直觉是垂直和水平移动的数量在所有路径上都是固定的,因此问题可以简化为计算排列

对于平方NxN矩阵,路径数为第N个加泰罗尼亚数

       / 2 N \     / 2 N \
C_N = |       | - |       |
       \  N  /     \ N+1 /

在任何情况下,这意味着产品的数量是N的指数,因此效率将受到限制


如果您根据某些标准对最优路径感兴趣,则该问题可能会考虑动态规划,从而考虑多项式空间和时间。

最小化乘积相当于最小化对数之和。求图中最短路径和的算法很多。实际上,我认为你不需要计算对数。只是调整现有的方法你的问题不清楚。你所说的路径积是什么意思?@MBo所说的路径积我指的是该路径中包含的索引上的整数的积。在上面的例子中,其中一条路径是0,0->0,1->1,1->2,1->2,2,2。因此,乘积是mat[0][0]*mat 0][1]*mat 1][1]*mat 2][1]=720 Damien,但我不需要最短路径。实际上,我想检查一条可能路径的乘积是否可以被给定的整数“k”整除。只计算这些可能的路径。@Touqeer Pathan但你的问题并没有提到k的可整除性和计算这些路径。值得编辑问题,添加完整的问题陈述
       / 2 N \     / 2 N \
C_N = |       | - |       |
       \  N  /     \ N+1 /