定义表示走到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大小的格子