题解 | JZ47 礼物的最大价值
这道题是二维动态规划的经典题,我们把0行和0列的值更新好了,就可以用下面的动态规划的方程来求解了。
dp[i][j] = max(dp[i-1][j], dp[i][j-1]) + grid[i][j];
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param grid int整型vector<vector<>>
* @return int整型
*/
int maxValue(vector<vector<int> >& grid) {
// write code here
int n = grid.size();
int m = grid[0].size();
int dp[n][m];
dp[0][0] = grid[0][0];
for (int j = 1; j < m; j++) {
dp[0][j] = dp[0][j-1] + grid[0][j];
}
for(int i = 1; i < n; i++) {
dp[i][0] = dp[i-1][0] + grid[i][0];
}
for (int i = 1; i < n; i++) {
for (int j = 1; j < m; j++) {
dp[i][j] = max(dp[i-1][j], dp[i][j-1]) + grid[i][j];
}
}
return dp[n-1][m-1];
}
};
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
#
# @param grid int整型二维数组
# @return int整型
#
class Solution:
def maxValue(self , grid: List[List[int]]) -> int:
# write code here
n = len(grid)
m = len(grid[0])
dp = [[0] * m for i in range(n)]
dp[0][0] = grid[0][0]
for j in range(1, m):
dp[0][j] = dp[0][j-1] + grid[0][j]
for i in range(1, n):
dp[i][0] = dp[i-1][0] + grid[i][0]
for i in range(1, n):
for j in range(1, m):
dp[i][j] = max(dp[i-1][j], dp[i][j-1]) + grid[i][j]
return dp[n-1][m-1]