动态规划真的懂了呀系列《线性DP:路径数目 累加》

91 阅读1分钟

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

LCR 098. 不同路径

// dp[i][j] = 走到(i,j)点的路径数目
// dp[i][j] = dp[i-1][j] + dp[i][j-1]
class Solution {
    public int uniquePaths(int m, int n) {
        //dp[i][j] = dp[i-1][j] + dp[i][j-1]

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

        dp[0][1] = 1;
        for(int i = 1; i<=m;i++){
            for(int j = 1; j<=n;j++){
                dp[i][j] = dp[i-1][j]+dp[i][j-1];
      //确定下init         
      //dp[1][1]=dp[0][1]+dp[1][0];
      //按照这个公式推肯定不行,
      //因为 f 的初始数值都是 0,再怎么推也都是 0,
      //先从起点下手,我们要让f(1,1)能根据上面得到的式子推出答案是 1(即起点到起点需要1步)
      //这样才能有得到意义的结果。
      //所以我们需要 将 dp [1][0]或者 dp[0][1] 初始化成 1 即可
            }
        }

        return dp[m][n];
    }
}