目录
一、礼物的最大价值题目
剑指 Offer 47. 礼物的最大价值 - 力扣(LeetCode)
二、代码
class Solution {
public:
int maxValue(vector<vector<int>>& grid) {
int m=grid.size();
int n=grid[0].size();
vector<vector<int>>dp(m,vector<int>(n,grid[0][0]));//全部初始化第一个礼物的价值
for(int i=1;i<m;i++)//初始化第一列
dp[i][0]=dp[i-1][0]+grid[i][0];
for(int j=1;j<n;j++)
dp[0][j]=dp[0][j-1]+grid[0][j];
for(int i=1;i<m;i++)
{
for(int j=1;j<n;j++)
dp[i][j]=max(dp[i-1][j],dp[i][j-1])+grid[i][j];
}
return dp[m-1][n-1];
}
};
三、下降路径的最小和题目
四、代码
class Solution {
public:
int minFallingPathSum(vector<vector<int>>& matrix) {
int m=matrix.size();
int n=matrix[0].size();
vector<vector<int>>dp(m,vector<int>(n,matrix[0][0]));
for(int j=1;j<n;j++)//初始化第一行
dp[0][j]=matrix[0][j];
for(int i=1;i<m;i++)
{
for(int j=0;j<n;j++)
{
if(j==0)//数据在一列的位置上
dp[i][j]=min(dp[i-1][j],dp[i-1][j+1])+matrix[i][j];
else if(j==n-1)//数据在最后一列的位置上
dp[i][j]=min(dp[i-1][j-1],dp[i-1][j])+matrix[i][j];
else
dp[i][j]=min(min(dp[i-1][j-1],dp[i-1][j]),dp[i-1][j+1])+matrix[i][j];
}
}
int x=dp[m-1][0];
for(int j=1;j<n;j++)//找dp数组中的最小值
{
if(x>dp[m-1][j])
x=dp[m-1][j];
}
return x;
}
};