/**
* 题目:礼物的最大价值。m*n大小的矩阵中放着价值>0的物品,
* 从左上角走到左下角,每次只能向下或者向右走。
* @author hexiaoli
* 思路:剑指offer eg:从右到左翻译并计算不同翻译的数目,解除重复子问题。
*/
public class Main {
public static int getMaxValue(int[][] values) {
//二维数组行列
int rows = values.length;
int columns =values[0].length;
//当前最大值和结果
int currentMax = values[0][0];
int result = values[0][0];
//边界问题
if(values == null || values.length == 0) {
return 0;
}
int i = 0;
int j = 0;
while ((i<rows-1)&&(j < columns-1)) {
if(values[i][j]+values[i+1][j]>values[i][j]+values[i][j+1]) {
result +=values[i+1][j];
i++;
}else {
result +=values[i][j+1];
j++;
}
}
while ((i<rows-1)) {
result +=values[i+1][j];
i++;
}
while ((j < columns-1)) {
result +=values[i][j+1];
j++;
}
return result;
}
public static void main(String[] args) {
int[][] values= {{1,10,3,8},{12,2,9,6},{5,7,4,11},{3,7,16,5}};
System.out.println(getMaxValue(values));
}
}