leetcode64. 最小路径和

分析

f[i][j]表示从(0,0)坐标到(i,j)的最小和,每次转移都从f[i-1][j]或者f[i][j-1]转移过来,两者取最小值即可。

class Solution {
public:
    int minPathSum(vector<vector<int>>& grid) {
        int m=grid.size(),n=grid[0].size();
        vector<vector<int>> f(m, vector<int>(n));
        f[0][0]=grid[0][0];
         for(int i=1;i<m;i++){
             f[i][0]+=f[i-1][0]+grid[i][0];//初始化第一列
         }
          for(int i=1;i<n;i++){
             f[0][i]=f[0][i-1]+grid[0][i];//初始化第一行
         }
        for(int i=1;i<m;i++){
             for(int j=1;j<n;j++){
                 f[i][j]=min(f[i-1][j],f[i][j-1])+grid[i][j];//转移方程
             }
        }
        return f[m-1][n-1];
    }
};