1 solutions

  • 4
    @ 2024-7-16 18:07:46
    #include <bits/stdc++.h>
    #define int long long
    using namespace std;
    int n,m;
    int a[105][105]={};
    bool vst[105][105]={};
    //是否走过 
    int mx=0;
    int step[105][105]={};
    //dp数组 
    
    int sx[]={0,0,1,-1};
    int sy[]={1,-1,0,0};
    //这两个是走的方向 
    void dfs(int x,int y){
    	if(vst[x][y]) return;
    	vst[x][y]=1;
    	for(int i=0;i<4;i++){
    		int xx=x+sx[i];
    		int yy=y+sy[i];
    		//下一步坐标 
    		if(!(xx<0||yy<0||xx>=n||yy>=m)&&a[xx][yy]<a[x][y]){
    			dfs(xx,yy);
    			//开始走 
    			step[x][y]=max(step[x][y],step[xx][yy]+1); 
    			//更新dp数组 
    		}
    	}
    	mx=max(mx,step[x][y]);
    	//更新最大值 
    }
    signed main(){
    	cin>>n>>m;
    	for(int i=0;i<n;i++) for(int j=0;j<m;j++) cin>>a[i][j];
    	for(int i=0;i<n;i++) for(int j=0;j<m;j++) dfs(i,j);
    	//每个点都要跑一遍 
    	cout<<mx+1<<"\n";
    	return 0;
    }
    

    雪(意味深

    • 1

    Information

    ID
    427
    Time
    1000ms
    Memory
    125MiB
    Difficulty
    3
    Tags
    # Submissions
    77
    Accepted
    22
    Uploaded By