【问题标题】:Traversing a matrix using dynamic programming使用动态规划遍历矩阵
【发布时间】:2018-04-09 14:37:49
【问题描述】:

假设有一个包含N 行和M 列的矩阵。

你从左下角开始遍历,你的当前点P为0,空间S大于0。在矩阵中的每一点,坐标要么为空,要么包含点。如果点的大小为X,值V,则可以在到达坐标时选择是否拾取。

对于矩阵的遍历,我们只能上移一行,从三列中选择一列(即(i + 1, j − 1)、(i + 1, j)或(i + 1, j + 1))

积分增加PV,S减少X。


我正在尝试编写一个动态编程算法,该算法将遍历此并返回导致最多点数的最佳路径。

我认为子问题是:

L(N, j) = Null
L(i, 0) = max(L(i + 1, 0), L(i + 1, 1))
L(i, j) = max(L(i + 1, j − 1), L(i + 1, j), L(i + 1, j + 1))
L(i, M) = max(L(i + 1, j - 1), L(i + 1, j))

这行得通吗?我将如何将其引入算法?

【问题讨论】:

    标签: algorithm matrix dynamic-programming


    【解决方案1】:

    你可以通过两种方式做到这一点:

    1. 递归调用应该涵盖所有边界/边缘条件的函数 例如,函数调用如下所示:

      function L(i,j, p, s) :
      if(i<0 or j<0)    return -1 #edge case
      if(s<0)           return -1 #out of space
      if(p<0)           return 0  #no possible outcome
      if (s == 0)       return p  #the end
      else              return max{L(i + 1, j − 1, p+v, s-x), L(i + 1, j, p+v, s-x), L(i + 1, j + 1, p+v, s-x)}
      
    2. 使用 (s

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-22
      • 2013-11-01
      • 2016-03-17
      • 2016-09-27
      相关资源
      最近更新 更多