LCR 166. 珠宝的最高价值 - 力扣(LeetCode)
题目描述
现有一个记作二维矩阵
frame
的珠宝架,其中frame[i][j]
为该位置珠宝的价值。拿取珠宝的规则为:
- 只能从架子的左上角开始拿珠宝
- 每次可以移动到右侧或下侧的相邻位置
- 到达珠宝架子的右下角时,停止拿取
注意:珠宝的价值都是大于 0 的。除非这个架子上没有任何珠宝,比如
frame = [[0]]
。
解题思路还是多开一行一列,初始化为0,表示没有价值的珠宝。
代码
class Solution {
public:
int jewelleryValue(vector<vector<int>>& frame) {
int r=frame.size();//行
int c=frame[0].size();//列
vector<vector<int>> dp(r+1,vector<int>(c+1,0));//多开一行一列,初始化为0
for(int i=1;i<=r;i++)
{
for(int j=1;j<=c;j++)
{
dp[i][j]=frame[i-1][j-1]+max(dp[i-1][j],dp[i][j-1]);//状态转换方程
}
}
return dp[r][c];//返回右下角
}
};