【问题标题】:confusion about subproblem in dynamic programming question [closed]关于动态编程问题中子问题的混淆[关闭]
【发布时间】:2020-01-05 17:04:35
【问题描述】:

机器人位于 3 x 7 网格的左上角(在下图中标记为“开始”)。

机器人只能在任何时间点向下或向右移动。机器人正试图到达网格的右下角(在下图中标记为“完成”)。

有多少种可能的独特路径?

例如,在这个问题中,我们可以应用 DP 策略将其分解为多个子程序。

我的问题是针对每个子问题,我们是否也有子网格?每个子问题是否共享同一个网格或每个子问题的网格形状可以改变?

例如,如果我们计算 (1,6) 的路径计数(开始 (0,0) ,结束 (2,6)),我们只考虑形状为 2 X 6 的网格,删除最后一行。

【问题讨论】:

  • 我不太明白你的问题。 “相同的网格”与“网格的形状变化”是什么意思?这只是询问如何用 DP 解决这个问题的迂回方式吗?
  • 我编辑了问题并给出了示例。我希望它现在有意义,

标签: java algorithm dynamic-programming


【解决方案1】:

这取决于你。子问题是相同形式的较小问题,此决定是您如何定义该形式的一部分。要么:

“机器人可以从 MxN 网格的左上角移动到右下角有多少种方式?”在这种情况下,是的,每个子问题都会有不同大小的网格,机器人必须穿过整个东西。

“机器人可以在网格上的 M 和 N 个空间中移动多少种方式?”在这种情况下,所有子问题都使用相同的网格,但您不必在角落开始和结束。

任何一种方式都有效。然而,这个问题通常会因障碍而扩展。在这种情况下,只有子网格公式有效,因为障碍物的位置很重要。

【讨论】:

    【解决方案2】:

    IMO,因为鉴于 Robot can only move down or right at any time 存在限制,您可以说对于每个子问题,网格的形状都发生了变化,因为您无法移回除右侧或底部以外的位置(如果它们可用) .

    所以如果在第一次移动之后你向右移动(1R,2C),你现在只能去(1R,3C 或 2R,2C)。所以在某种程度上,网格的形状已经改变了那个子问题。

    【讨论】:

    • 对于这个问题,我们有子问题,但我们有子网格吗?如果我们让机器人向 4 个方向移动会怎样?
    • @echoLee IMO 除非约束条件是机器人可以移动到网格内的任何位置,然后整个网格成为每个子问题的子网格。在所有剩余的情况下,子网格取决于当前位置和可能的位置。
    猜你喜欢
    • 2014-11-08
    • 1970-01-01
    • 1970-01-01
    • 2010-12-31
    • 1970-01-01
    • 2015-07-08
    • 2023-03-23
    • 1970-01-01
    • 2015-06-14
    相关资源
    最近更新 更多