蓝桥P8675在线求调
  • 板块灌水区
  • 楼主God_Max_Me
  • 当前回复3
  • 已保存回复3
  • 发布时间2023/1/6 15:19
  • 上次更新2023/10/24 05:23:43
查看原帖
蓝桥P8675在线求调
632128
God_Max_Me楼主2023/1/6 15:19

我也不知道我是怎么写的,本人蒟蒻,实在写不出来了,各位大佬帮忙看一下(实际上我觉得我的代码错的可以全删了

#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;
}
2023/1/6 15:19
加载中...