题目链接:点击这里
#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;
}