动态规划解题步骤:
1.确定状态表示:dp[i]是什么
2.确定状态转移方程:dp[i]等于什么
3.初始化:确保状态转移方程不越界
4.确定填表顺序:根据状态转移方程即可确定填表顺序
5.确定返回值
题目链接:LCR 166. 珠宝的最高价值 - 力扣(LeetCode)
题解:
1.状态表示:dp[i][j]表示到达珠宝架子的[i,j]位置时,拿取的最高珠宝价值
2.状态转移方程:dp[i][j]=frame[i][j]+max(dp[i-1][j],dp[i][j-1])
3.初始化:多开一行一列,将初始化与填表合并
4.填表顺序:遍历二维数组,依次填写
5.返回值:dp[m][n] (m为珠宝架子行数,n为珠宝架子列数)
class Solution {
public:
int jewelleryValue(vector<vector<int>>& frame) {
size_t m=frame.size();
size_t n=frame[0].size();
//创建dp表
vector<vector<int>> dp(m+1,vector<int>(n+1));
//多开位置填值
for(int i=0;i<=m;++i) dp[i][0]=0;
for(int j=0;j<=n;++j) dp[0][j]=0;
//填表+初始化
for(int i=1;i<=m;++i)
for(int j=1;j<=n;++j)
dp[i][j]=frame[i-1][j-1]+max(dp[i-1][j],dp[i][j-1]);
return dp[m][n];
}
};
//dp[i][j]=frame[i][j]+max(dp[i-1][j],dp[i][j-1])