# include <iostream>
# include <cstring>
const int N = 105, mod = 1000000007;
char brick[N][N];
int high[N], n, m, r;
long long ans = 1, d[N][N][2];
void get_maxhigh()
{
for(int j = 0; j < m; j++)
for(int i = n; i >= 1; i--)
{
if(brick[i][j] != '.')
break;
high[j]++;
}
}
long long dfs(int pos, int h, int state)
{
if(pos > r)
return 1;
if(d[pos][h][state] != -1)
return d[pos][h][state];
long long sum = 0;
for(int i = 1; i <= high[pos]; i++)
{
if(i > h && state)
sum = (sum + dfs(pos + 1, i, 1)) % mod;
else
{
if(i == h)
sum = (sum + dfs(pos + 1, i, state)) % mod;
else
sum = (sum + dfs(pos + 1, i, 0)) % mod;
}
}
return d[pos][h][state] = sum;
}
int main()
{
cin >> n >> m;
for(int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
cin >> brick[i][j];
get_maxhigh();
int l = m;
for(int i = 0; i < m; i++)
{
if(i < m - 1 && brick[n][i] == '.')
{
if(l == m)
l = i;
continue;
}
for(r = i; r >= l; r--)
{
memset(d, -1, sizeof(d));
for(int j = r; j >= l; j--)
ans = (ans + dfs(j, 1, 1)) % mod;
}
l = m;
}
cout << ans % mod;
return 0;
}
显示:
‘cin’在此作用域中尚未声明
‘cout’在此作用域中尚未声明