牛客 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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章