【问题标题】:Can this be categorised as Dynamic programming or a greedy solution? [closed]这可以归类为动态编程或贪婪解决方案吗? [关闭]
【发布时间】:2015-03-01 01:45:48
【问题描述】:

给出了一个由 N x M 个单元组成的表格,每个单元有一定数量的苹果。 你从左上角开始。在每一步,您都可以向下或向右移动一个单元格。 找出您可以收集的最大苹果数。

【问题讨论】:

    标签: algorithm dynamic-programming greedy


    【解决方案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]

    【讨论】:

    • 非常感谢您的详尽解释。
    猜你喜欢
    • 2023-04-03
    • 1970-01-01
    • 2015-01-07
    • 2021-08-17
    • 2021-01-17
    • 2012-06-08
    • 1970-01-01
    • 2020-09-20
    • 1970-01-01
    相关资源
    最近更新 更多