描述
在一个m×n的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。给定一个棋盘及其上面的礼物的价值,请计算你最多能拿到多少价值的礼物?
如输入这样的一个二维数组,
[
[1,3,1],
[1,5,1],
[4,2,1]
]
那么路径 1→3→5→2→1 可以拿到最多价值的礼物,价值为12
- 0<grid.length≤200
- 0<grid[0].length≤200
示例
// 输入:
[[1,3,1],[1,5,1],[4,2,1]]
// 返回值:
12
解题思路
动态规划
代码实现
/**
* 动态规划
*
* @param grid int整型二维数组
* @return int整型
*/
func maxValue(grid [][]int) int {
// n 行,m 列
n, m := len(grid), len(grid[0])
for i := 0; i < n; i++ {
for j := 0; j < m; j++ {
if i > 0 && j > 0 {
grid[i][j] += int(math.Max(float64(grid[i-1][j]), float64(grid[i][j-1])))
} else if i > 0 && j == 0 {
grid[i][j] += grid[i-1][j]
} else if i == 0 && j > 0 {
grid[i][j] += grid[i][j-1]
}
}
}
return grid[n-1][m-1]
}
还不快抢沙发