dp第一题

因为对内分工的原因,我的dp一直很弱,最近觉得dp非常有趣,于是开始狂刷dp了。

#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
int dp[1051][1051];
int main()
{
    int n,m;
    while(scanf("%d%d",&n,&m)!=EOF)
    {
        memset(dp,0,sizeof(dp));
        for(int i=1;i<=n;i++)
            dp[i][1]=1;
        for(int j=1;j<=m;j++)
            dp[1][j]=1;
        for(int i=2;i<=n;i++)
            for(int j=2;j<=m;j++)
            {
                if(i==n && j==m)
                {
                    dp[i][j]=(dp[i-1][j]+dp[i][j-1])%10007;
                    break;
                }
                else
                {
                    dp[i][j]=(dp[i-1][j]+dp[i][j-1])%10007;
                }
            }
        cout << dp[n][m]%10007 <<endl;
    }
    return 0;
}

已知一个帅哥(zlgg)要从学校走回家,地图是N*M的网格状,他的学校在左上角,家在右下角,但他只能向右或向下走,问:他有多少种不同的走法回家?

状态:dp[i][j]代表走到网格i*j时有多少种不同走法;

状态转移方程:dp[i][j]=dp[i-1][j]+dp[i][j-1];

原文地址:https://www.cnblogs.com/markliu/p/2496714.html