2020牛客寒假算法基础集训营3 A.牛牛的DRB迷宫I
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相关推荐
- 2020牛客寒假算法基础集训营3 B 牛牛的DRB迷宫II二进制详解
2020牛客寒假算法基础集训营3 B 牛牛的DRB迷宫II B 牛牛的DRB迷宫II 输入: 25 输出: 5 5 RBBBR BBBBB BBBDB BDBBB RBBBB 题解 由图求方案数,我们 ...
- 2020牛客寒假算法基础集训营3——J.牛牛的宝可梦Go【最短路 DP(01背包) 复杂度优化】(附优化分析)
题目传送门 题目描述 牛牛所在的W市是一个不太大的城市,城市有n个路口以及m条公路,这些双向连通的公路长度均为1,保证你可以从一个城市直接或者间接移动到所有的城市.牛牛在玩宝可梦Go,众所周知呢,这个 ...
- (构造+二进制)2020牛客寒假算法基础集训营3B.牛牛的DRB迷宫II
2020牛客寒假算法基础集训营3B.牛牛的DRB迷宫II 思路: 一开始我是考虑全部都是B会怎么样,然后删改,结果到后面发现很难推到普遍规律(可能是因为我没看出来). 看了题解之后,觉得这题出的挺有意 ...
- 2020牛客寒假算法基础集训营1
2020牛客寒假算法基础集训营1 honoka和格点三角形 题目描述 输入描述 输出描述 示例 解题思路 代码 kotori和bangdream 题目描述 输入描述 输出描述 示例 解题思路 代码 u ...
- 2021牛客寒假算法基础集训营2 D.牛牛与整除分块
2021牛客寒假算法基础集训营2 D.牛牛与整除分块 题目链接 题目描述 整除分块,又称数论分块.是数论算法中的重要技巧,你可以在各种需要枚举因子的连续求和类问题中见到它的身影.如杜教筛,莫比乌斯反演 ...
- 2020牛客寒假算法基础集训营3
链接:link 来源:牛客网 A 牛牛的DRB迷宫I 题目描述 牛牛有一个n*m的迷宫,对于迷宫中的每个格子都为'R','D','B'三种类型之一,'R'表示处于当前的格子时只能往右边走'D'表示处于 ...
- 2020牛客寒假算法基础集训营4
链接:link 来源:牛客网 A 欧几里得 题目描述 现在,如果已知 g c d ( a , b ) gcd(a,b) gcd(a,b) 共递归了 n n n次,求所有可能的 a , b a,b a, ...
- 2020牛客寒假算法基础集训营5:B.牛牛战队的比赛地(二分/三分)
整理的算法模板:ACM算法模板总结(分类详细版) 链接:https://ac.nowcoder.com/acm/contest/3006/B 来源:牛客网 题目描述 由于牛牛战队经常要外出比赛,因此在 ...
- 2022牛客寒假算法基础集训营1 ——H 牛牛看云
链接:登录-专业IT笔试面试备考平台_牛客网 来源:牛客网 就像罗夏墨迹测试一样,同一片形状的云在不同人的眼中会看起来像各种各样不同的东西. 例如,现在天上飘过了一片长条状的云彩,hina说这片云长得 ...
最新文章
- windows服务,安装、启动、停止,配置,一个批处理文件搞定
- 安卓实现记住密码登陆功能
- time库是python中处理时间的标准库_python语言time库和datetime库基本使用详解
- raft引入no-op解决了什么问题
- one microblog from 任志强
- 2017-2018-1 Java演绎法 第三周 作业
- [转]JSon数据解析的四种方式
- 百度地图iOS API
- AD的命名规则 AD常用产品型号命名规则
- hdu4707 Pet(bfs dfs,vector)
- 我如何开始使用Node.js [关闭]
- 常用linux系统管理工具
- FPGA BCD计数器(一位)
- Mobileye技术与市场走势
- Centos禁止屏幕虚拟键盘弹出
- 电脑关机后键盘灯和风扇还在转的解决方案
- 常用的几种非对称加密算法
- 管理理念:导致员工工作效率低下的8大原因
- 利用FFmpeg合并音频和视频
- PHP傻瓜式一键建站系统源码+无需授权