代码:
- 当前格的礼物最大价值等于 上一格的最大价值加上本格价值或前一格的最大价值加上本格
- 由此得到状态转移方程
- 如题可以原地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
}