zoukankan      html  css  js  c++  java
  • 牛客寒假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
    ",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;
    }
    
  • 相关阅读:
    S02_CH15_ AXI_OLED 实验
    S02_CH14_ EMIO_OLED 实验
    S02_CH13_ AXI_PWM 实验
    S02_CH12_ AXI_Lite 总线详解
    【第二季】CH11_ ZYNQ软硬调试高级技巧
    bzoj3028 食物
    Hdu3579 Hello Kiki
    bzoj4872 [Shoi2017]分手是祝愿
    bzoj4873 [Shoi2017]寿司餐厅
    省选模拟赛 LYK loves rabbits(rabbits)
  • 原文地址:https://www.cnblogs.com/fisherss/p/12316849.html
Copyright © 2011-2022 走看看