50分求助,全MLE了
查看原帖
50分求助,全MLE了
1068448
guang_zi_guei_ji楼主2024/8/5 09:21
#include<iostream>
using namespace std;
int a[110][110],b[110][110],n,m,Max=0;
bool jump(int sum,int x,int y){
	if(x>n||x<1||y>m||y<1||a[x][y]>sum){
		return 0;
	}
	return 1;
}
int dfs(int x,int y){
	if(b[x][y]>0){
		return b[x][y];
	}
	bool i=jump(a[x][y],x+1,y),j=jump(a[x][y],x-1,y),k=jump(a[x][y],x,y+1),l=jump(a[x][y],x,y-1);
	int Max1=0;
	if(i&&Max1<dfs(x+1,y)){
		Max1=dfs(x+1,y)+1;
	}
	if(j&&Max1<dfs(x-1,y)){
		Max1=dfs(x-1,y)+1;
	}
	if(k&&Max1<dfs(x,y+1)){
		Max1=dfs(x,y+1)+1;
	}
	if(l&&Max1<dfs(x,y-1)){
		Max1=dfs(x,y-1)+1;
	}
	if(!i&&!j&&!k&&!l){
		return 1;
	}
	b[x][y]=Max1;
	return Max1;
}
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			cin>>a[i][j];
		}
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			b[i][j]=dfs(i,j);
			if(b[i][j]>Max){
				Max=b[i][j];
			}
		}
	}
	cout<<Max;
	return 0;
}
2024/8/5 09:21
加载中...