定义表示走到i行j列时能获得的最高奖金,由于只能向右走或者向下走,要求最高奖金,那么可得转移方程:
即当前能获得的最大奖金为 左边和上边一格中的较大值+当前格子的值
#include <vector>
class Bonus {
public:
int getMost(vector<vector<int> > board) {
vector<vector<int>> dp(6, vector<int>(6, 0));
dp[0][0] = board[0][0];
// 注意第一列、第一行只能选择直直走
for (int i = 1; i < 6; i++) {
dp[i][0] = dp[i - 1][0] + board[i][0];
}
for (int j = 1; j < 6; j++) {
dp[0][j] = dp[0][j - 1] + board[0][j];
}
for (int i = 1; i < 6; i++) {
for (int j = 1; j < 6; j++) {
dp[i][j] = max(dp[i][j - 1], dp[i - 1][j]) + board[i][j];
}
}
return dp[5][5];
}
};
时间复杂度:O(1),由于题目规定了是6*6大小的格子
空间复杂度:O(1),由于题目规定了是6*6大小的格子

京公网安备 11010502036488号