最小路径和
dp问题描述
最小路径和
确定本题的状态表示
dp[i][j]表示的是矩阵从左上角走到(i,j)位置一路上的数字总和的最小值
确定本题的状态转移方程
本题的状态转移方程依然是
dp[i][j]=min(dp[i-1][j],dp[i][j-1])+grid[i-1][j-1];
但是要注意边界条件,因为边界值初始化为0,我们比的又是最小值,所以当i和j位于矩阵数值边界时,不能把最外围那层0加进来比,否则会污染有效数据
填表求值
根据初始条件和状态转移方程,确定填表顺序,进而逐步填满dp表,最终返回题目要的结果
代码实现
class Solution {
public:int minPathSum(vector<vector<int>>& grid) {int m=grid.size();if(m==0) return 0;int n=grid[0].size();vector<vector<int>> dp(m+1,vector<int>(n+1,0));for(int i=1;i<=m;i++){for(int j=1;j<=n;j++){if(i==1)dp[i][j]=dp[i][j-1]+grid[i-1][j-1];else if(j==1)dp[i][j]=dp[i-1][j]+grid[i-1][j-1];elsedp[i][j]=min(dp[i-1][j],dp[i][j-1])+grid[i-1][j-1];cout << "dp["<<i<<"]["<<j<<"]="<< dp[i][j]<< endl;}}return dp[m][n];}
};