关于MLE
查看原帖
关于MLE
414210
Iam1789楼主2021/11/6 10:44

为什么这份代码会MLE呀/fad

我算着数组空间大小不超过100MB呀

#include <bits/stdc++.h>
using namespace std;
int T;
int n,m;
char b[2007][2007];
int dp[2007][2007];
int step[2007][2007];
bool vis[2007][2007];
long long ans=0;
int maxx,maxy;
bool dfs(int x,int y,int fax,int fay)
{
	if(vis[x][y]!=0&&dp[x][y]==0)
	{
		dp[x][y]=step[fax][fay]-step[x][y]+1;
		return 0;
	}
	if(vis[x][y]||dp[x][y]||x<1||x>n||y<1||y>m)
	return 1;
	step[x][y]=step[fax][fay]+1;
	vis[x][y]=1;
	bool qwq;
	if(b[x][y]=='L')
	{
		qwq=dfs(x,y-1,x,y);
		if(dp[x][y])
		qwq=1;
		else
		dp[x][y]=dp[x][y-1]+qwq;
	}
	if(b[x][y]=='R')
	{
		qwq=dfs(x,y+1,x,y);
		if(dp[x][y])
		qwq=1;
		else
		dp[x][y]=dp[x][y+1]+qwq;
	}
	if(b[x][y]=='U')
	{
		qwq=dfs(x-1,y,x,y);
		if(dp[x][y])
		qwq=1;
		else
		dp[x][y]=dp[x-1][y]+qwq;
	}
	if(b[x][y]=='D')
	{
		qwq=dfs(x+1,y,x,y);
		if(dp[x][y])
		qwq=1;
		else
		dp[x][y]=dp[x+1][y]+qwq;
	}
	if(ans<dp[x][y])
	{
		ans=dp[x][y];
		maxx=x;
		maxy=y;
	}
	return qwq;
}
int main()
{
	scanf("%d",&T);
	while(T--)
	{
		ans=0;
		maxx=maxy=0;
		scanf("%d%d",&n,&m);
		for(int i=1;i<=n;++i)
		scanf("%s",b[i]+1);
		for(int i=1;i<=n;++i)
		{
			for(int j=1;j<=m;++j)
			{
				dfs(i,j,0,0);
			}
		}
		printf("%d %d %lld\n",maxx,maxy,ans);
		for(int i=0;i<=n+1;++i)
		{
			for(int j=0;j<=m+1;++j)
			{
				b[i][j]=step[i][j]=dp[i][j]=vis[i][j]=0;
			}
		}
	}
	return 0;
}
2021/11/6 10:44
加载中...