90分求助
查看原帖
90分求助
1128129
SCP3023楼主2024/7/29 15:15
#include<bits/stdc++.h>//记忆化搜索
using namespace std;
int r,c,mp[1001][1001];
int sum[1001][1001];
int dx[4]={0,1,0,-1};
int dy[4]={1,0,-1,0};
void Dfs(int x,int y){
	int flag=0;
	for(int i=0;i<4;i++){
		if(mp[x+dx[i]][y+dy[i]]<mp[x][y]){
			flag=1;
			if(sum[x+dx[i]][y+dy[i]]==0){
				Dfs(x+dx[i],y+dy[i]);
			}
			sum[x][y]=max(sum[x][y],sum[x+dx[i]][y+dy[i]]+1);
		}
	}
	if(flag==0){
		sum[x][y]=1;
	}
	return;
}
int main(){
	cin>>r>>c;
	for(int i=0;i<=r;i++){//边界框
		mp[i][0]=10000001;
		mp[0][i]=10000001;
		mp[i][r+1]=10000001;
		mp[r+1][i]=10000001;
	}
	mp[r+1][r+1]=10000001;
	for(int i=1;i<=r;i++){
		for(int j=1;j<=c;j++){
			cin>>mp[i][j];
		}
	} 
	int mx=1;
	for(int i=1;i<=r;i++){
		for(int j=1;j<=c;j++){
			if(sum[i][j]==0){
				Dfs(i,j);
			}
			if(sum[i][j]>=mx){
				mx=sum[i][j];	
			}
		}
	}
	cout<<mx;
	return 0;
}
2024/7/29 15:15
加载中...