Sword47——礼物的最大价值
Sword47——礼物的最大价值
方法1——动态规划
-
思路:每个单元格只能从左边或上面移动到此处,因此从左上角遍历,将每个单元格可取得的最大礼物价值直接存入矩阵即可 特殊情况与临界分析:见于步骤中 终止条件:到达矩阵右下角 步骤: 获取矩阵的行列数 双重for循环遍历矩阵 特殊情况: 当i、j均为0时,证明为第一格,直接continue跳过 当i为0时证明为第一行,只能从左侧移动 当j为0时证明为第一列,只能从上面移动 当以上特殊情况都不满足,比较左侧和上面两个单元格,选择较大值加上自身值存入单元格中 返回最右下角的最大值
public int maxValue(int[][] grid) { // 获取矩阵的行列数 int rows = grid.length, columns = grid[0].length; // 双重for循环遍历矩阵 for (int i = 0; i < rows; i++) { for (int j = 0; j < columns; j++) { // 当i、j均为0时 if (i == 0 && j == 0) { continue; } // 当i为0时,证明为第一行 if (i == 0) { grid[i][j] += grid[i][j - 1]; // 当j为0时,证明为第一列 } else if (j == 0) { grid[i][j] += grid[i - 1][j]; // i、j均不为0时,选择左侧或上面的较大值 } else { grid[i][j] += Math.max(grid[i][j - 1], grid[i - 1][j]); } } } // 返回右下角的值 return grid[rows - 1][columns - 1]; }
上一篇:
通过多线程提高代码的执行效率例子
下一篇:
棋盘上礼物价值最大化问题