二维数组1.礼物最大价值
在一个mn的棋盘上每格都有一个礼物,价值都大于0,从左上角开始拿格子里的礼物,直到到右下角,求最大价值的礼物为多少。 在一个mn的棋盘上每格都有一个礼物,价值都大于0,从左上角开始拿格子里的礼物,直到到右下角,求最大价值的礼物为多少。 dp[i][j]表示这个位置能拿到的最大价值,他怎么得到呢,可能由它上面得到,可能从左边得到所以dp[i][j]=max(dp[i-1][j]+num[i][j],dp[i][j-1]+nums[i][j]) 这个不太好优化空间,因为如果要优化,需要从右开始,但是这个是从左开始的,所以很难办。
class Solution { public int maxValue(int[][] grid) { int[][] dp=new int[grid.length+1][grid[0].length+1]; 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]+grid[i-1][j-1],dp[i][j-1]+grid[i-1][j-1]); } } return dp[grid.length][grid[0].length]; } }
上一篇:
通过多线程提高代码的执行效率例子