题目链接:
https://www.nowcoder.com/practice/72a99e28381a407991f2c96d8cb238ab?tpId=49&&tqId=29305&rp=1&ru=/activity/oj&qru=/ta/2016test/question-ranking
解题思路:
定义F(i, j)
表示从左上角走到坐标(i, j)
处能获得的最大奖励
F(i, j)
分三种情况:
第一列:
java F(i, 0) = F(i-1, 0) + board(i, 0)
第一行:
java F(0, j) = F(0, j - 1) + board(0, j)
其它位置:
java F(i, j) = max{F(i-1, j), F(i, j - 1)} + board(i, j)
最后返回右下角的值
import java.util.*;
public class Bonus {
public int getMost(int[][] board) {
int row = board.length;
int col = board[0].length;
for(int i = 1; i < row; i++){
board[i][0] += board[i - 1][0];
}
for(int j = 1; j < col; j++){
board[0][j] += board[0][j - 1];
}
for(int i = 1; i < row; i++){
for(int j = 1; j < col; j++){
board[i][j] += Math.max(board[i - 1][j], board[i][j - 1]);
}
}
return board[row - 1][col - 1];
}
}