求助,玄关
查看原帖
求助,玄关
742070
xujiadashaoye楼主2025/6/29 20:21
#include<bits/stdc++.h>
#define ll long long
#define ld long double
using namespace std;
ll XN[100000010],DN[100000010];
int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);cout.tie(0);
	//freopen("","r",stdin);
	//freopen("","w",stdout);
	ll r,c;cin>>r>>c;
	ll LN[r+1][c+1];
	vector<ll>v(0);v.push_back(0);
	for(ll i=1;i<=r;i++){
		for(ll j=1;j<=c;j++){
			cin>>LN[i][j];
			XN[LN[i][j]]=i;
			DN[LN[i][j]]=j;
			v.push_back(LN[i][j]);
		}
	}
	sort(v.begin(),v.end());
	//for(int i=1;i<=r*c;i++)cout<<v[i]<<" ";
	ll f[r+1][c+1];
	for(ll i=1;i<=r;i++){
		for(ll j=1;j<=c;j++){
			f[i][j]=1;
		}
	}
	for(ll i=1;i<=r*c;i++){
		ll x=XN[v[i]],y=DN[v[i]];
		if(x-1>0){
			if(LN[x-1][y]>LN[x][y]){
				f[x-1][y]=max(f[x-1][y],f[x][y]+1);
			}
		}
		if(x+1<=r){
			if(LN[x+1][y]>LN[x][y]){
				f[x+1][y]=max(f[x+1][y],f[x][y]+1);
			}
		}
		if(y-1>0){
			if(LN[x][y-1]>LN[x][y]){
				f[x][y-1]=max(f[x][y-1],f[x][y]+1);
			}
		}
		if(y+1<=c){
			if(LN[x][y+1]>LN[x][y]){
				f[x][y+1]=max(f[x][y+1],f[x][y]+1);
			}
		}
		/*for(int aa=1;aa<=r;aa++){
			for(int bb=1;bb<=c;bb++){
				cout<<f[aa][bb]<<" ";
			}
			cout<<endl;
		}
		cout<<endl;*/
	}
	ll maxn=-1;
	for(ll i=1;i<=r;i++){
		for(ll j=1;j<=c;j++){
			maxn=max(maxn,f[i][j]);
		}
	}
	cout<<maxn;
	return 0;
}

#1#3#10WA

2025/6/29 20:21
加载中...