求助,5个点MLE
查看原帖
求助,5个点MLE
547002
hang09楼主2022/8/20 22:00
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;

int n,m;
int dx[4]={0,0,1,-1};
int dy[4]={1,-1,0,0};
int h[110][110];
int rec[110][110];
int ans = 0;

int f(int x,int y)
{
	if(rec[x][y] != -1)return rec[x][y];
	int an = 0;
	for(int i = 0; i < 4; i++)
	{
		int nx = x + dx[i];
		int ny = y + dy[i];
		if(nx < 1 || nx > n || ny < 1 || ny > m)continue;//越界
		if(h[nx][ny] > h[x][y])continue;
		an = max(f(nx,ny),an);//4个方向依次枚举,取最长
	}
	return rec[x][y] = an + 1;
}

int main()
{
	memset(rec, -1,sizeof(rec));
	scanf("%d%d",&n,&m);
	for(int i = 1; i <= n; i++)
	{
		for(int j = 1; j <= m; j++)
		{
			scanf("%d",&h[i][j]);
		}
	}
	for(int i = 1; i <= n; i++)
	{
		for(int j = 1; j <= m; j++)
		{
			ans = max(ans,f(i,j));
		}
	}
	printf("%d\n",ans);
    return 0;
}
2022/8/20 22:00
加载中...