import java.util.*; public class Solution { public int maxValue (int[][] grid) { int[][] dp = new int[grid.length][grid[0].length]; // 处理只有一行或者一列的情况 if(grid.length == 1){ int res = 0; for(int i = 0;i<grid[0].length;i++){ res += grid[0][i]; } return res; } if(grid[0].length == 1){ int res = 0; for(int i = 0;i<grid.length;i++){ res += grid[i][0]; } return res; } // 初始化dp数组,将第一行和第一列的值初始化 dp[0][0] = grid[0][0]; for(int i = 1;i<grid.length;i++){ dp[i][0] = dp[i-1][0] + grid[i][0]; } for(int j = 1;j<grid[0].length;j++){ dp[0][j] = dp[0][j - 1] + grid[0][j]; } // 除第一行和第一列外,dp[i][j] = Math.max(dp[i-1][j],dp[i][j - 1]) + grid[i][j]; // 计算出所有的值 for(int i = 1;i<grid.length;i++){ for(int j = 1;j<grid[0].length;j++){ dp[i][j] = Math.max(dp[i-1][j],dp[i][j - 1]) + grid[i][j]; } } // 最后返回右下角出口的结果 return dp[grid.length-1][grid[0].length-1]; } }