【算法笔记】动态规划——走棋盘

题目描述

一个棋盘有n行m列,从棋盘的左上角走到右下角,每次只能往右走一步,或者往下走一步,总共有多少种走法?
【算法笔记】动态规划——走棋盘_第1张图片

Input: m = 3, n = 2
Output: 3
总共有三种走法
1.右 -> 右 -> 下
2.右 -> 下 -> 右
3.下 -> 右 -> 右

解题思路

假设将某个格子作为终点,该格子位于第 i i i行第 j j j列,走法总数 = 终点上方格子的走法总数 + 终点左边格子的走法总数。原问题的解包含子问题的解,符合最优子结构的定义,典型的动态规划问题。

写成方程:
s i j = s i j − 1 + s i − 1 j s_{ij}=s_{ij-1}+s_{i-1j} sij=sij1+si1j

解题代码

class Solution
{
  public:
    int maxSize = 200;
    int s[200][200];

    int uniquePaths(int m, int n)
    {

        for (int i = 1; i <= m; i++)
        {
            s[1][i] = 1;
        }
        for (int j = 1; j <= n; j++)
        {
            s[j][1] = 1;
        }

        //填表:从左到右,从上到下
        for (int i = 2; i <= n; i++)
        {
            for (int j = 2; j <= m; j++)
            {
                s[i][j] = s[i - 1][j] + s[i][j - 1];
                //s[i - 1][j] -- 左
                //s[i][j - 1] -- 上
            }
        }

        return s[n][m];
    }
};

LeetCode链接:LeetCode 62. Unique Paths

你可能感兴趣的:(算法与数据结构,算法刷题)