题意:一个m x n 的网格,每个格子里有一个非负整数,找到一条从左上角到右下角的路径,使其经过的格子数值之和最小,每一步只能向右或向下。
分析:这是一道典型的动态规划题,使用动态规划求解问题,最重要的就是确定动态规划三要素:
1)问题的阶段;
2)每个阶段的状态;
3)从前一个阶段转化到后一个阶段之间的递推关系。MPS[i][j] = Min(MPS[i-1][j],MPS[i][j-1])+ val[i][j];
class Solution {
public:
int minPathSum(vector<vector<int>>& grid) {
vector<vector<int>> min1(grid);
min1[0][0]=grid[0][0];
for(int i=1;i<grid.size();i++)
{
min1[i][0]=min1[i-1][0]+grid[i][0];
}
for(int i=1;i<grid[0].size();i++)
{
min1[0][i]=min1[0][i-1]+grid[0][i];
}
for(int i=1;i<grid.size();i++)
for(int j=1;j<grid[0].size();j++)
{
min1[i][j]=min(min1[i-1][j],min1[i][j-1])+grid[i][j];
}
return min1[grid.size()-1][grid[0].size()-1];
}
};