1 #include<iostream> 2 #include<algorithm> 3 #include<cstdio> 4 using namespace std; 5 6 #define mfor(i,a,b) for(register int i=(a);i<=(b);i++) 7 #define mrep(i,a,b) for(register int i=(a);i>=(b);i--) 8 typedef long long int LL; 9 10 const int maxn = 2010; 11 const int mod = 1e9 + 7; 12 char a[maxn][maxn]; 13 LL sumd[maxn][maxn]; 14 LL sumr[maxn][maxn]; 15 LL f[maxn][maxn][2]; //第三维0向右,1向下 16 int n, m; 17 18 int main() 19 { 20 cin >> n >> m; 21 mfor(i, 1, n) 22 { 23 //scanf_s("%s", a[i] + 1, maxn); 24 scanf(" %s", a[i] + 1); 25 } 26 if (n == m && n == 1) 27 { 28 if (a[1][1] == ‘.‘) 29 { 30 cout << 1; 31 return 0; 32 } 33 } 34 mrep(i, n, 1) 35 { 36 mrep(j, m, 1) 37 { 38 sumd[i][j] = sumd[i][j + 1] + (a[i][j] == ‘R‘ ? 1 : 0); 39 sumr[i][j] = sumr[i + 1][j] + (a[i][j] == ‘R‘ ? 1 : 0); 40 } 41 } 42 mfor(i, 1, n - 1) 43 { 44 if (!sumr[i][m]) f[i][m][0] = 1; 45 } 46 mfor(i, 1, m - 1) 47 { 48 if (!sumd[n][i]) f[n][i][1] = 1; 49 } 50 mrep(i, n - 1, 1) 51 { 52 mrep(j, m - 1, 1) 53 { 54 (f[i][j][0] += f[i + 1][j][1]) %= mod; 55 (f[i][j][1] += f[i][j + 1][0]) %= mod; 56 if (a[i + 1][j] == ‘R‘) (f[i][j][0] += f[i + 1][j][0] - f[n - sumr[i + 1][j] + 1][j][1] + mod) %= mod; 57 else (f[i][j][0] += f[i + 1][j][0]) %= mod; 58 if (a[i][j + 1] == ‘R‘) (f[i][j][1] += f[i][j + 1][1] - f[i][m - sumd[i][j + 1] + 1][0] + mod) %= mod; 59 else (f[i][j][1] += f[i][j + 1][1]) %= mod; 60 } 61 } 62 cout << (f[1][1][0] + f[1][1][1]) % mod; 63 }
原文地址:https://www.cnblogs.com/thjkhdf12/p/11751703.html
时间: 2024-11-05 15:58:04