动态规划真的懂了系列呀《线性DP:路径和最值》

74 阅读1分钟

价值:记录学习过程的思考,本身就是一场动态规划的前生,记忆化搜索。

LCR 099. 最小路径和

// dp[i][j] = 路径到达这个点(i,j)的 和 的 最值 min
// dp[i][j]=min(dp[i-1][j],dp[i][j-1])+grid[i][j];
class Solution {
    public int minPathSum(int[][] grid) {
        if(grid == null || grid.length == 0 || grid[0].length == 0) return 0x7fffffff;

        //dp[i][j]=min( dp[i-1][j],dp[i][j-1] ) + grid[i][j];

        int n = grid.length;
        int m = grid[0].length;

        int[][] dp = new int[n][m];

        dp[0][0] = grid[0][0];
        
        for(int i=1;i<n;i++){
            dp[i][0] = dp[i-1][0] + grid[i][0];
        }

        for(int j=1;j<m;j++){
            dp[0][j] = dp[0][j-1] + grid[0][j];
        }


        for(int i = 1; i < n ; i++){
            for(int j = 1; j < m; j++){
                dp[i][j] = Math.min(dp[i-1][j],dp[i][j-1])+grid[i][j];
            }
        }
        return dp[n-1][m-1];
    }
}