算法刷题-动态规划2
- 珠宝的最高价值
- 下降路径最小和
珠宝的最高价值
题目
大佬思路
多开一行使得代码更加的简洁
移动到右侧和下侧
dp[ i ][ j ]有两种情况:
第一种是从上面来的礼物最大价值:dp[ i ][ j ] = dp[ i - 1 ][ j ] + g[ i ][ j ]
第二种是从左面来的礼物最大价值:dp[ i ][ j ] = dp[ i ][ j - 1 ] + g[ i ][ j ]
所以得出状态表达式,dp[ i ][ j ] = max( dp[ i ][ j - 1 ],dp[ i - 1 ][ j ] ) + g[ i ][ j ]
2。为了简洁代码,多增加一行
class Solution {public int maxValue(int[][] grid) {int m = grid.length;int n = grid[0].length;//dp[i][j]表示从grid[0][0]到grid[i - 1][j - 1]时的最大价值int[][] dp = new int[m + 1][n + 1];for (int i = 1; i <= m; i++) {for (int j = 1; j <= n; j++) {dp[i][j] = Math.max(dp[i - 1][j], dp[i][j - 1]) + grid[i - 1][j - 1];}}return dp[m][n];}
}class Solution {
public: int maxValue(vector<vector<int>>& grid) { int m = grid.size(), n = grid[0].size(); vector<vector<int>> dp(m + 1, vector<int>(n + 1)); for (int i = 1; i <= m; i++) { for (int j = 1; j <= n; j++) { dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]) + grid[i - 1][j - 1];}}return dp[m][n]; }
};
下降路径最小和