czy032321054 @ 2024-08-02 16:04:48
#include<bits/stdc++.h>
using namespace std;
int r,c,a[110][110],dx[4]={1,-1,0,0},dy[4]={0,0,1,-1},f[110][110];
int dfs(int x,int y){
if(f[x][y]!=-1)return f[x][y];
f[x][y]=0;
int ans=-2e9;
for(int i=1;i<=r;i++)
for(int j=1;j<=c;j++)
for(int k=0;k<4;k++)
if(a[i+dx[k]][j+dy[k]]>a[i][j]&&i+dx[k]>=1&&i+dx[k]<=r&&j+dy[k]>=1&&j+dy[k]<=c)
ans=max(ans,dfs(i+dx[k],j+dy[k]));
if(ans==-2e9)ans=-1;
ans++;
return f[x][y]=ans;
}
int main(){
cin>>r>>c;
for(int i=1;i<=r;i++)
for(int j=1;j<=c;j++)
cin>>a[i][j],f[i][j]=-1;
for(int i=1;i<=r;i++){
for(int j=1;j<=c;j++){
bool b=0;
for(int k=0;k<4;k++)
if(a[i+dx[k]][j+dy[k]]<a[i][j]&&i+dx[k]>=1&&i+dx[k]<=r&&j+dy[k]>=1&&j+dy[k]<=c){
b=1;
break;
}
if(b)continue;
f[i][j]=dfs(i,j);
}
}
int ans=-2e9;
for(int i=1;i<=r;i++)
for(int j=1;j<=c;j++)
ans=max(ans,f[i][j]);
cout<<ans;
}