题解 | #走方格的方案数#

走方格的方案数

https://www.nowcoder.com/practice/e2a22f0305eb4f2f9846e7d644dba09b

const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;

void (async function () {
  // Write your code here
  while ((line = await readline())) {
    let [n, m] = line.split(" ").map((v) => parseInt(v));
    let dp = [];
    for (let i = 0; i <= n; i++) {
      dp[i] = [];
      for (let j = 0; j <= m; j++) {
        if (i === 0 || j === 0) {
          dp[i][j] = 1;
        }
      }
    }
    for (let i = 1; i <= n; i++) {
      for (let j = 1; j <= m; j++) {
          // 状态转移
        dp[i][j] = dp[i - 1][j] + dp[i][j - 1];
      }
    }
    console.log(dp[n][m]);
  }
})();
n × m的方格沿边线走,和(n+1) × (m+1)的方格沿方格走到最后一格是相同的方案,故可以理解为走(n+1) × (m+1)方格。进入左上角第一个方格只有一种方案,故dp[0][0]=1,除此之外,进入第一行的方格和第一列的方格都只有一种走法:第一行只能从左边的那个方格走过来,第一列的方格只能由上面的方格走下来,其余方格可由左侧或上方进入,所以
    dp[i][j] = dp[i - 1][j] + dp[i][j - 1];
最后一格dp[n][m]即为总的方案数。
全部评论

相关推荐

11-03 12:40
中山大学 Java
勇敢的突尼斯海怪选钝...:楼主这拒意向话术好得体呀 !求问HR回复态度咋样呀
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务