2020牛客寒假算法基础集训营3 A.牛牛的DRB迷宫I

题目描述

牛牛有一个n*m的迷宫,对于迷宫中的每个格子都为’R’,‘D’,'B’三种类型之一,'R’表示处于当前的格子时只能往右边走’D’表示处于当前的格子时只能往下边走,而’B’表示向右向下均可以走。

我们认为迷宫最左上角的坐标为(1,1),迷宫右下角的坐标为(n,m),除了每个格子有向右移动以及向下移动的限制之外,你也不能够走出迷宫的边界。

牛牛现在想要知道从左上角走到右下角不同种类的走法共有多少种,请你告诉牛牛从(1,1)节点移动到(n,m)节点共有多少种不同的移动序列,请你输出方案数对 1 0 9 + 7 10^9+7 109+7取余数后的结果。

我们认为两个移动序列是不同的,当且仅当移动序列的长度不同,或者在某一步中采取了不同的移动方式。

输入描述:

第一行输入两个正整数n,m(1≤n,m≤50)表示迷宫的大小是n行m列。

接下来n行,每行输入一个长度为m的字符串,字符串中仅包含大写字母’D’,‘R’,‘B’。

输出描述:
输出一行一个整数,表示方案数对 1 0 9 10^9 109取余数后的结果。

示例1

输入

5 5
RBBBR
BBBBB
BBBDB
BDBBB
RBBBB

输出

25

DP的题不能拿BFS写,因为答案会很大,导致内存超限……
还是乖乖写了DP,我是个DP小菜鸡/(ㄒoㄒ)/~~
思路很简单 d p i , j = j u d g e ( d p i − 1 , j ) + j u d g e ( d p i , j − 1 ) dp_{i,j}=judge(dp_{i-1,j})+judge(dp_{i,j-1}) dpi,j​=judge(dpi−1,j​)+judge(dpi,j−1​), j u d g e ( i , j ) judge(i,j) judge(i,j)表示对该位置的字符进行判断是否可以加上或者舍去,具体见代码:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
char g[55][55];
int n,m;
ll dp[55][55];
const ll mod=1e9+7;
int main()
{cin>>n>>m;for(int i=0;i<n;i++){for(int j=0;j<m;j++)cin>>g[i][j];}memset(dp,0,sizeof(dp));dp[0][0]=1;for(int i=0;i<n;i++){for(int j=0;j<m;j++){if(i==0 && j==0) continue;else if(i==0) {if(g[i][j-1]=='R' || g[i][j-1]=='B') dp[i][j]=dp[i][j-1]%mod;else dp[i][j]=0;}else if(j==0) {if(g[i-1][j]=='D' || g[i-1][j]=='B') dp[i][j]=dp[i-1][j]%mod;else dp[i][j]=0;}else{if(g[i-1][j]=='R' && g[i][j-1]=='D') dp[i][j]=0;else if(g[i-1][j]=='R' && g[i][j-1]!='D') dp[i][j]=dp[i][j-1]%mod;else if(g[i-1][j]!='R' && g[i][j-1]=='D') dp[i][j]=dp[i-1][j]%mod;else dp[i][j]=(dp[i-1][j]+dp[i][j-1])%mod;}}}cout<<dp[n-1][m-1];return 0;
}

2020牛客寒假算法基础集训营3 A.牛牛的DRB迷宫I相关推荐

  1. 2020牛客寒假算法基础集训营3 B 牛牛的DRB迷宫II二进制详解

    2020牛客寒假算法基础集训营3 B 牛牛的DRB迷宫II B 牛牛的DRB迷宫II 输入: 25 输出: 5 5 RBBBR BBBBB BBBDB BDBBB RBBBB 题解 由图求方案数,我们 ...

  2. 2020牛客寒假算法基础集训营3——J.牛牛的宝可梦Go【最短路 DP(01背包) 复杂度优化】(附优化分析)

    题目传送门 题目描述 牛牛所在的W市是一个不太大的城市,城市有n个路口以及m条公路,这些双向连通的公路长度均为1,保证你可以从一个城市直接或者间接移动到所有的城市.牛牛在玩宝可梦Go,众所周知呢,这个 ...

  3. (构造+二进制)2020牛客寒假算法基础集训营3B.牛牛的DRB迷宫II

    2020牛客寒假算法基础集训营3B.牛牛的DRB迷宫II 思路: 一开始我是考虑全部都是B会怎么样,然后删改,结果到后面发现很难推到普遍规律(可能是因为我没看出来). 看了题解之后,觉得这题出的挺有意 ...

  4. 2020牛客寒假算法基础集训营1

    2020牛客寒假算法基础集训营1 honoka和格点三角形 题目描述 输入描述 输出描述 示例 解题思路 代码 kotori和bangdream 题目描述 输入描述 输出描述 示例 解题思路 代码 u ...

  5. 2021牛客寒假算法基础集训营2 D.牛牛与整除分块

    2021牛客寒假算法基础集训营2 D.牛牛与整除分块 题目链接 题目描述 整除分块,又称数论分块.是数论算法中的重要技巧,你可以在各种需要枚举因子的连续求和类问题中见到它的身影.如杜教筛,莫比乌斯反演 ...

  6. 2020牛客寒假算法基础集训营3

    链接:link 来源:牛客网 A 牛牛的DRB迷宫I 题目描述 牛牛有一个n*m的迷宫,对于迷宫中的每个格子都为'R','D','B'三种类型之一,'R'表示处于当前的格子时只能往右边走'D'表示处于 ...

  7. 2020牛客寒假算法基础集训营4

    链接:link 来源:牛客网 A 欧几里得 题目描述 现在,如果已知 g c d ( a , b ) gcd(a,b) gcd(a,b) 共递归了 n n n次,求所有可能的 a , b a,b a, ...

  8. 2020牛客寒假算法基础集训营5:B.牛牛战队的比赛地(二分/三分)

    整理的算法模板:ACM算法模板总结(分类详细版) 链接:https://ac.nowcoder.com/acm/contest/3006/B 来源:牛客网 题目描述 由于牛牛战队经常要外出比赛,因此在 ...

  9. 2022牛客寒假算法基础集训营1 ——H 牛牛看云

    链接:登录-专业IT笔试面试备考平台_牛客网 来源:牛客网 就像罗夏墨迹测试一样,同一片形状的云在不同人的眼中会看起来像各种各样不同的东西. 例如,现在天上飘过了一片长条状的云彩,hina说这片云长得 ...

最新文章

  1. windows服务,安装、启动、停止,配置,一个批处理文件搞定
  2. 安卓实现记住密码登陆功能
  3. time库是python中处理时间的标准库_python语言time库和datetime库基本使用详解
  4. raft引入no-op解决了什么问题
  5. one microblog from 任志强
  6. 2017-2018-1 Java演绎法 第三周 作业
  7. [转]JSon数据解析的四种方式
  8. 百度地图iOS API
  9. AD的命名规则 AD常用产品型号命名规则
  10. hdu4707 Pet(bfs dfs,vector)
  11. 我如何开始使用Node.js [关闭]
  12. 常用linux系统管理工具
  13. FPGA BCD计数器(一位)
  14. Mobileye技术与市场走势
  15. Centos禁止屏幕虚拟键盘弹出
  16. 电脑关机后键盘灯和风扇还在转的解决方案
  17. 常用的几种非对称加密算法
  18. 管理理念:导致员工工作效率低下的8大原因
  19. 利用FFmpeg合并音频和视频
  20. PHP傻瓜式一键建站系统源码+无需授权

热门文章

  1. glup的安装与启动
  2. WIN10 64位专业版系统安装
  3. 7-6 奇偶分家 (10 分)
  4. 新球场,新球衣,新号码,现在,终于到了年轻人一闯天下的时候!
  5. SpringBoot:解决循环依赖
  6. python爬取微信好友信息并根据导出的csv做数据分析
  7. 条形码计算机工作原理视频,条形码的工作原理
  8. 商业周刊评出2009年度最佳及最差科技产品
  9. Ubuntu系统下高频终端命令使用教程|1-3
  10. selenium 配置无头浏览器