给出由N×M个细胞组成的表,每个细胞具有一定量的苹果。 你从左上角开始。在每个步骤中,您可以向下或向右移动一个单元格。 找到您可以收集的最大苹果数量。
答案 0 :(得分:1)
对于此问题,下面定义的最自然贪婪方法不起作用。
在每个单元格中,选择右侧或底部包含更多苹果的单元格
考虑以下示例:
0 0 0 0
1 0 0 5
1 0 0 0
1 0 0 0
贪婪的方法将采用路径M[0, 0] → M[3, 0] → M[3, 3]
(从左上角到左下角,然后到右下角),这会给我们三个苹果。这显然不是这种情况的最佳解决方案。
您应该部署动态编程技术来解决此问题。让D[i, j]
表示从左上角(0, 0)
到(i, j)
的最优解,因为在每一步我们都可以向下或向右走,显然我们在子问题之间存在以下关系:
D[i, j] = c(i, j) + max{ D[i - 1, j], D[i, j - 1] }
其中c(i, j)
表示(i, j)
中的苹果数量。从最小的子问题D[0, 0] = c(0, 0)
开始,我们可以使用上面的公式通过评估直接子问题的值来计算D[N, M]
。