TLE#2
查看原帖
TLE#2
670349
laybare_mushroom楼主2024/8/25 18:13
#include<bits/stdc++.h>
using namespace std;
int R,C,dp[300][300],vis[101][101],lu=1,maxn=-1,sum=0;
void dfs(int xa,int ya){
	if(xa+1<=R){
		if(vis[xa+1][ya]==0&&dp[xa+1][ya]<dp[xa][ya]){
			lu++;
			//cout<<xa<<" "<<ya<<" ";
		vis[xa+1][ya]=-1;
		dfs(xa+1,ya);
		}
		
	}
	if(ya+1<=C){
		if(vis[xa][ya+1]==0&&dp[xa][ya+1]<dp[xa][ya]){
			lu++;
		//	cout<<xa<<" "<<ya<<" ";
		vis[xa][ya+1]=-1;
		dfs(xa,ya+1);
		}
		
	}
	if(xa-1>=1){
		if(vis[xa-1][ya]==0&&dp[xa-1][ya]<dp[xa][ya]){
		lu++;
		//cout<<xa<<" "<<ya<<" ";
		vis[xa-1][ya]=-1;
		dfs(xa-1,ya);	
		}
		
	}
	if(ya-1>=1){
		if(vis[xa][ya-1]==0&&dp[xa][ya-1]<dp[xa][ya]){
			lu++;
			//cout<<xa<<" "<<ya<<" ";
		vis[xa][ya-1]=-1;
		dfs(xa,ya-1);
		}
		
	}
	if(lu>maxn){
		maxn=lu;
	}
	lu--;
	vis[xa][ya]=0;
	//return;
}
int main(){
	cin>>R>>C;
	memset(dp,0,sizeof(dp));
	memset(vis,0,sizeof(vis));
	for(int i=1;i<=R;i++){
		for(int j=1;j<=C;j++){
			scanf("%d",&dp[i][j]);
		}
	}
	for(int i=1;i<=R;i++){
		for(int j=1;j<=C;j++){
			if(i+1<=R){
				if(dp[i+1][j]>dp[i][j]){
					continue;
				}
			}
			if(i-1>=1){
				if(dp[i-1][j]>dp[i][j]){
					continue;
				}
			}
			if(j+1<=C){
				if(dp[i][j+1]>dp[i][j]){
					continue;
				}
			}
			if(j-1>=1){
				if(dp[i][j-1]>dp[i][j]){
					continue;
				}
			}
			vis[i][j]=-1;
			//cout<<i<<j;
			dfs(i,j);
			lu=1;
			vis[i][j]=0;
		}
	}
	cout<<maxn;
	return 0;
}
2024/8/25 18:13
加载中...