题目描述:原题链接
解法:动态规划
思路:
用二维数组存图,初始化到(1,1)点的方案书为1,每次递归判断两次,向左还是向上。
#include<bits/stdc++.h>
using namespace std;
const int mood = 1e9 + 7;
long long sum[55][55];//记录每个到达该空格的所有方案。
char a[55][55];
int n, m;
int main(){
cin >> n >> m;
for (int i = 1; i <= n; i ++)
for (int j = 1; j <= m; j ++) cin >> a[i][j];
sum[1][1] = 1;
for (int i = 1; i <= n; i ++)
for (int j = 1; j <= m; j ++){
if (a[i][j - 1] == 'R' || a[i][j - 1] == 'B') sum[i][j] += sum[i][j - 1] % mood;//加上从左边到达该空格的所有方案。
if (a[i - 1][j] == 'D' || a[i - 1][j] == 'B') sum[i][j] += sum[i - 1][j] % mood;//加上从上边到达该空格的所有方案。
}
cout << sum[n][m] % mood;
return 0;
}