(C++)剑指offer-拓展:礼物的最大值
f[i][j] 代表走到(i,j)这个位置的最大价值。由于只能向下向右走,(i,j)这个位置只能从左边和上边过来,所以f[i][j] = max(f[i-1][j],f[i][j-1]) + grid[i-1][j-1](第i行第j列位置在矩阵中表示均左减1,因为从[0][0]开始),整体从左边和上边这两个位置选一个较大的加上本位置的价值即可。整体时间复杂度位O(nm)。具体代码如下:
class Solution {
public:
int getMaxValue(vector<vector<int>>& grid) {
int m = grid.size(), n = grid[0].size();
vector<vector<int>> f(m + 1, vector<int>(n + 1));
for(int i = 1; i <= m; i++)
for(int j = 1; j <= n; j++)
f[i][j] = max(f[i - 1][j], f[i][j - 1]) + grid[i - 1][j - 1]; //注意grid的位置表示
return f[m][n];
}
};