题目:
题解:
思路类比 62. 不同路径,都是同一种状态转移方式。
代码如下:
const int N = 210;
int f[N][N];// 状态f[i][j]表示到达(i,j)这个点的路径数字最小和
class Solution {
public:
// 思路:线性dp,状态转移方程与不同路径相似,由当前点的正上的状态和左边的状态推出来
int minPathSum(vector<vector<int>>& g) {
memset(f,0,sizeof f);
int n=g.size(),m=g[0].size();
// 初始化第一行和第一列,因为状态转移f[i][j-1]和f[i-1][j]对于对于第一行和第一列是会出现越界,所以需要单独处理下,避免在循环进行状态转移时,需要特判
f[0][0]=g[0][0];
for(int j=1;j<m;++j)f[0][j]=f[0][j-1]+g[0][j];
for(int i=1;i<n;++i)f[i][0]=f[i-1][0]+g[i][0];
// 开始进行状态转移:i j 都是从小到大进行枚举即可,这样用到的f[i][j-1] f[i-1][j]都是之前计算过的状态了
for(int i=1;i<n;++i)
for(int j=1;j<m;++j)
f[i][j]=min(f[i-1][j],f[i][j-1])+g[i][j];
return f[n-1][m-1];
}
};