You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

1D青蛙跳DP问题的二维推广:带步长限制的路径计数求解咨询

1D青蛙跳DP问题的二维推广:带步长限制的路径计数求解咨询

嗨,看起来你已经从一维青蛙跳问题摸到了二维路径计数的核心门道,这个思路方向完全没问题!先给你点个赞~

先把你的问题明确下:

一只青蛙从点A$(0,0)$跳到点B$(5,6)$,每一步只能向右或向上走1单位或2单位,求总路径数。你已经知道一维下f(i) = f(i-1)+f(i-2)的递推关系,想知道二维是不是可以推广为$f(i,j) = f(i-1,j)+f(i-2,j)+f(i,j-1)+f(i,j-2)$?

没错,这个递推式完全正确!下面给你拆解清楚逻辑、边界条件和计算步骤:

递推式的逻辑解释

首先我们定义$f(i,j)$为从$(0,0)$走到$(i,j)$的总路径数,要走到$(i,j)$,最后一步只能是以下四种合法情况之一:

  • 从左边$(i-1,j)$跳1单位向右抵达 → 对应路径数$f(i-1,j)$
  • 从左边$(i-2,j)$跳2单位向右抵达 → 对应路径数$f(i-2,j)$
  • 从下边$(i,j-1)$跳1单位向上抵达 → 对应路径数$f(i,j-1)$
  • 从下边$(i,j-2)$跳2单位向上抵达 → 对应路径数$f(i,j-2)$

根据加法原理,把这四种情况的路径数相加,就是走到$(i,j)$的总路径数,完全符合逻辑。

关键的边界条件处理

这部分不能忽略,否则计算会出错:

  • 起点初始值:$f(0,0) = 1$(只有1种方式待在起点)
  • 非法坐标处理:当$i<0$或$j<0$时,$f(i,j) = 0$(不存在负数坐标的点,所以路径数为0)
  • 边缘行/列的特殊处理:
    • 当$i=0$(只能向上跳):$f(0,j) = f(0,j-1)+f(0,j-2)$,这就是一维青蛙跳问题的递推,比如$f(0,1)=1$,$f(0,2)=2$,$f(0,3)=3$以此类推
    • 当$j=0$(只能向右跳):$f(i,0) = f(i-1,0)+f(i-2,0)$,同样遵循一维青蛙跳的规则

计算到$(5,6)$的具体步骤

你可以按行或按列填充DP表,这里给你列关键节点的计算示例:

  1. 先填充第一行($i=0$,$j$从0到6):
    $f(0,0)=1$,$f(0,1)=1$,$f(0,2)=2$,$f(0,3)=3$,$f(0,4)=5$,$f(0,5)=8$,$f(0,6)=13$
  2. 再填充第一列($j=0$,$i$从0到5):
    $f(0,0)=1$,$f(1,0)=1$,$f(2,0)=2$,$f(3,0)=3$,$f(4,0)=5$,$f(5,0)=8$
  3. 逐步填充其他单元格,比如:
    $f(1,1)=f(0,1)+f(-1,1)+f(1,0)+f(1,-1)=1+0+1+0=2$
    $f(1,2)=f(0,2)+f(-1,2)+f(1,1)+f(1,0)=2+0+2+1=5$

按照这个规则一步步计算到$f(5,6)$,最终结果为1445。

补充说明

如果遇到更大的坐标,这个递推式依然适用,只要正确处理边界条件即可。你也可以用记忆化递归的方式实现,避免重复计算,不过对于$(5,6)$这种小坐标,直接迭代填充DP表会更简单高效。

备注:内容来源于stack exchange,提问作者Ri-Li

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.16 08:18:10