#include<bits/stdc++.h> using namespace std; const int maxn=2010,mod=1000000007; inline void Add(int &a,int b){a=a+b>=mod?a+b-mod:a+b;} int n,m,cntx[maxn][maxn],cnty[maxn][maxn],f[maxn][maxn],g[maxn][maxn]; int main() { scanf("%d%d",&n,&m);if(n1&&m1) return puts("1"),0; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) { char c=getchar();while(c==' '||c=='//n') c=getchar(); if(c=='R') cntx[i][j]=cnty[i][j]=1; } for(int i=n;i;i--) for(int j=m;j;j--) { cntx[i][j]+=cntx[i][j+1];//cntx 和 maxn cnty[i][j]+=cnty[i+1][j]; } f[1][1]=g[1][1]=1;f[2][1]=g[1][2]=-1; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) { Add(f[i][j],f[i-1][j]);//边上 Add(g[i][j+1],f[i][j]);//角上 Add(g[i][m-cntx[i][j+1]+1],mod-f[i][j]);//边角交接([1,1][1,n][n,m][1,m]) Add(g[i][j],g[i][j-1]);//一个箱子边上 Add(f[i+1][j],g[i][j]);//夹在几个箱子中间 Add(f[n-cnty[i+1][j]+1][j],mod-g[i][j]);//马上推出边界 } Add(f[n][m],g[n][m]);printf("%d\n",f[n][m]); return 0; }

0 comments

No comments so far...

Information

ID
268
Time
1000ms
Memory
256MiB
Difficulty
10
Tags
(None)
# Submissions
51
Accepted
2
Uploaded By