import java.util.*; /** * NC290 礼物的最大价值 * @author d3y1 */ public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param grid int整型二维数组 * @return int整型 */ public int maxValue (int[][] grid) { return solution(grid); } /** * 动态规划 * * dp[i][j]表示到达棋盘第i行第j列时所能得到的最大价值 * * { dp[i][j-1] + grid[i-1][j-1] , i=1 * dp[i][j] = { dp[i-1][j] + grid[i-1][j-1] , j=1 * { Math.max(dp[i][j-1], dp[i-1][j]) + grid[i-1][j-1] , i>1 & j>1 * * @param grid * @return */ private int solution(int[][] grid){ int m = grid.length; int n = grid[0].length; int[][] dp = new int[m+1][n+1]; for(int i=1; i<=m; i++){ for(int j=1; j<=n; j++){ if(i == 1){ dp[i][j] = dp[i][j-1] + grid[i-1][j-1]; continue; } if(j == 1){ dp[i][j] = dp[i-1][j] + grid[i-1][j-1]; continue; } dp[i][j] = Math.max(dp[i][j-1], dp[i-1][j]) + grid[i-1][j-1]; } } return dp[m][n]; } }