我也不知道我是怎么写的,本人蒟蒻,实在写不出来了,各位大佬帮忙看一下(实际上我觉得我的代码错的可以全删了)
#include<bits/stdc++.h>
#define int long long
#define endl "\n"
#define mod 1000000007
using namespace std;
int n,m;
char a[110][110];
int dp[110][110][4];
int ky[110];
signed main()
{
scanf("%d%d",&n,&m);
for(int i=n;i>=1;--i)
{
for(int j=1;j<=m;++j)
{
cin>>a[i][j];
}
}
memset(dp,-0x3f,sizeof(dp));
for(int i=1;i<=n;++i)
dp[i][0][0]=dp[i][0][1]=0;
dp[1][0][0]=1;
dp[1][1][1]=1;
dp[1][1][0]=1;
dp[1][1][2]=2;
// memset(ky,0x3f,sizeof(ky));
// ky[0]=0x3f;
int last,dq=0;
for(int i=1;i<=n;++i)
{
for(int j=1;j<=m;++j)
{
if(i==1 && a[i][j]!='X')
{
dp[i][j][1]=dp[i][j-1][1]+1;
dp[i][j][0]=dp[i][j-1][0];
dp[i][j][2]=dp[i][j][0]+dp[i][j][1]%mod;
}
else if(i==1 && a[i][j]=='X')
{
dp[i][j][1]=dp[i][j-1][1];
dp[i][j][0]=dp[i][j-1][0];
dp[i][j][2]=dp[i][j][1]+dp[i][j][0]%mod;
}
else if(i>1)
{
if(a[i-1][j]=='X')
{
dp[i][j][2]=dp[i][j-1][2];
}
else if(a[i-1][j]!='X' && a[i][j]!='X')
{
dp[i][j][1]=last+1;
dp[i][j][0]=0;
dp[i][j][2]=dp[i][j][1]+dp[i][j][0]%mod;
}
else
{
dp[i][j][2]=dp[i][j-1][2];
}
}
// int k=dp[i][j][1],b=dp[i][j][2];
if(dp[i][j][2]>dq) dq=dp[i][j][2]%mod;
}
last=dq;
dq=0;
}
// for(int i=1;i<=n;++i)
// {
// for(int j=1;j<=m;++j)
// {
// cout<<dp[i][j][2]<<' ';
// }
// cout<<endl;
// }
int ans=-1;
for(int i=1;i<=n;++i)
{
for(int j=1;j<=m;++j)
{
if(dp[i][j][2]!=-0x3f)
{
ans=max(ans,dp[i][j][2])%mod;
}
}
}
cout<<ans;
return 0;
}