牛客 A. 牛牛的DRB迷宫I(棋盘型dp)

题目链接:点击这里
在这里插入图片描述
在这里插入图片描述

#include<iostream>
#include<algorithm>
#include<cstdio>

using namespace std;
typedef long long ll;
const int N = 60, mod = 1e9 + 7;

int n, m;
char a[N][N];
int f[N][N];

int main()
{
	cin>>n>>m;
	cin.ignore();
	for(int i = 1; i <= n; ++i)
		for(int j = 1; j <= m; ++j)
			cin>>a[i][j];
	
	// 处理边界 
	f[1][1] = 1;	
	for(int j = 2; j <= m; ++j)
	{
		if(a[1][j-1]=='R' || a[1][j-1]=='B')	f[1][j] = f[1][j-1];
		else	f[1][j] = 0;
	}
	
	for(int i = 2; i <= n; ++i)
	{
		if(a[i-1][1]=='D' || a[i-1][1]=='B')	f[i][1] = f[i-1][1];
		else	f[i][1] = 0;
	}
	
	// 状态转移 
	for(int i = 2; i <= n; ++i)
	{
		for(int j = 2; j <= m; ++j)
		{
			if(a[i][j-1]=='R' || a[i][j-1]=='B')
				f[i][j] += f[i][j-1] % mod;
			
			if(a[i-1][j]=='D' || a[i-1][j]=='B')
				f[i][j] += f[i-1][j] % mod;
		}
	}
	
	printf("%d\n", f[n][m] % mod);
	
	return 0;
}
发布了811 篇原创文章 · 获赞 127 · 访问量 14万+

猜你喜欢

转载自blog.csdn.net/qq_42815188/article/details/104885704