和LeetCode 063和LeetCode 062差不多一样的意思,做法也差不多,主要这题是求左上到右下的最短代价。而一个位置的最短代价是dp[ii][jj]=min(dp[ii-1][jj],dp[ii][jj-1])+在此处的代价。
class Solution {
public:
int minPathSum(vector<vector<int>>& grid) {
int m=grid.size();
int n=grid[0].size();
vector<vector<int>>dp(m+1,vector<int>(n+1));
for(int ii=1;ii<=m;ii++){
for(int jj=1;jj<=n;jj++){
if(ii-1==0){dp[ii][jj]=dp[ii][jj-1]+grid[ii-1][jj-1];continue;}
if(jj-1==0){dp[ii][jj]=dp[ii-1][jj]+grid[ii-1][jj-1];continue;}
if(ii==1&&jj==1){dp[1][1]=grid[0][0];continue;}
dp[ii][jj]=dp[ii-1][jj]<dp[ii][jj-1]?dp[ii-1][jj]+grid[ii-1][jj-1]:dp[ii][jj-1]+grid[ii-1][jj-1];
}
}
return dp[m][n];
}
};