牛客寒假3-A |dp走格子

地址:https://ac.nowcoder.com/acm/contest/3004/A

思路

转载题解
dp[i][j]表示走到坐标为(i,j)的方案数;由当前格子方案数推下一步要走的格子方案

初始化:dp[1][1]=1; 表示走到坐标1,1点的方案数是1

代码

代码1:由当前格子方案数推下一步要走的格子方案

#include <bits/stdc++.h>
using namespace std;
const long long mod=1e9+7;
const int MAXN=55;
long long dp[MAXN][MAXN];
char mp[MAXN][MAXN];
int n,m;
int main()
{
    scanf("%d %d",&n,&m);
    for(int i=1;i<=n;++i)
    {
        scanf("%s",mp[i]+1);
    }
    dp[1][1]=1;
    for(int i=1;i<=n;++i)
    {
        for(int j=1;j<=m;++j)
        {
            if(mp[i][j]=='D')
            {
                dp[i+1][j]=(dp[i+1][j]+dp[i][j])%mod;
            }
            if(mp[i][j]=='R')
            {
                dp[i][j+1]=(dp[i][j+1]+dp[i][j])%mod;
            }
            if(mp[i][j]=='B')
            {
                dp[i+1][j]=(dp[i+1][j]+dp[i][j])%mod;
                dp[i][j+1]=(dp[i][j+1]+dp[i][j])%mod;
            }
        }
    }
    printf("%lld\n",dp[n][m]);
    return 0;
}

代码2:队友代码 由上一步格子方案数推到达当前格子的方案

#include<bits/stdc++.h>
#define inf 0x3f3f3f3f
using namespace std;
typedef long long ll;
const int maxn = 2e5+5;
const ll mod = 1e9+7;
ll a[maxn];
ll dp[55][55];
char g[55][55];
int main(){
    int n,m;
    cin>>n>>m;
    vector<string> v;
    for(int i = 1;i<=n;i++){
            string s;
            cin>>s;
            v.push_back(s);
    }
    for(int i = 1;i<=n;i++){
        for(int j = 1;j<=m;j++){
            g[i][j] = v[i-1][j-1];
        }
    }
    //初始化边界 
    dp[1][1] = 1;  
    for(int i = 2;i<=m;i++){
        if(g[1][i-1] == 'R' || g[1][i-1] == 'B') dp[1][i] = dp[1][i-1];
    }
    for(int i = 2;i<=n;i++){
        if(g[i-1][1] == 'B' || g[i-1][1] == 'D') dp[i][1] = dp[i-1][1];
    }
    //递推 
    for(int i = 2;i<=n;i++){
        for(int j = 2;j<=m;j++){
            if(g[i][j-1] == 'B'|| g[i][j-1] == 'R'){
                dp[i][j] = (dp[i][j-1] + dp[i][j] )%mod;
            }
            if(g[i-1][j] == 'D' || g[i-1][j] == 'B'){
                dp[i][j] = (dp[i-1][j] + dp[i][j] )%mod;
            }
        }
    }
    cout<<dp[n][m];
    return 0;
}
posted @ 2020-02-16 14:54  fishers  阅读(134)  评论(0编辑  收藏  举报