822. 走方格

同志们,822题更优解他来啦!

经本人研究发现还可以用动态规划来写。

动态转移方程:dp[i][j]=dp[i][j-1]+dp[i-1][j];(因为只能向下或向右走所以可以从[i-1,j]和[i,j-1]来到[i,j]点)

dp[i][j]:x值为i时,y值为j时最多有几种走到i,j点的可能。

初始化:

    for(int i=0;i<=m;i++) dp[0][i]=1;
    for(int i=0;i<=n;i++) dp[i][0]=1;

代码:

#include<bits/stdc++.h>
using namespace std;
int dp[1000][1000]={0},n,m;
int main()
{
    cin>>n>>m;
    for(int i=0;i<=m;i++) dp[0][i]=1;
    for(int i=0;i<=n;i++) dp[i][0]=1;
    for(int i=1;i<=n;i++)//注意要从1开始(后面有i-1)
    {
        for(int j=1;j<=m;j++)//注意要从1开始(后面有j-1)
        {
            dp[i][j]=dp[i][j-1]+dp[i-1][j];
        }
    }
    cout<<dp[n][m];
    return 0;
}

 

posted @ 2022-02-05 10:36  王浩泽  阅读(40)  评论(0编辑  收藏  举报