题目描述
思路分析
简单的线性dp问题。
转移方程:
f
[
0
]
[
0
]
=
g
[
0
]
[
0
]
,
f
[
i
]
[
j
]
=
m
i
n
(
f
[
i
]
[
j
−
1
]
,
f
[
i
−
1
]
[
j
]
)
+
g
[
i
]
[
j
]
;
f[0][0]=g[0][0],f[i][j]=min(f[i][j-1],f[i-1][j])+g[i][j];
f[0][0]=g[0][0],f[i][j]=min(f[i][j−1],f[i−1][j])+g[i][j];
注意边界情况,即
i
i
i或
j
j
j可能为0。
代码实现
class Solution {
public:
int minPathSum(vector<vector<int>>& g) {
int n=g.size(),m=g[0].size();
int f[210][210];
memset(f,0x3f,sizeof f);
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(!i&&!j) f[i][j]=g[i][j];
else{
if(j) f[i][j]=min(f[i][j],f[i][j-1]+g[i][j]);
if(i) f[i][j]=min(f[i][j],f[i-1][j]+g[i][j]);
}
}
}
return f[n-1][m-1];
}
};