礼物的最大价值——动态规划

72 阅读1分钟

image.png

代码:

  1. 当前格的礼物最大价值等于 上一格的最大价值加上本格价值或前一格的最大价值加上本格
  2. 由此得到状态转移方程
  3. 如题可以原地dp
func maxValue(grid [][]int) int {
    a := len(grid)
    b := len(grid[0])
    for i := 1; i < a; i++ {
        grid[i][0] += grid[i-1][0]
    }
    for j := 1; j < b; j++ {
        grid[0][j] += grid[0][j-1]
    }
    for i := 1; i < a; i++ {
        for j := 1; j < b; j++ {
            grid[i][j] += max(grid[i-1][j], grid[i][j-1])
        }
    }
    return grid[a-1][b-1]
}

func max(a, b int) int {
    if a > b {
        return a
    }
    return b
}