dfs+记忆化数组
#include<iostream>
#include<cstring>
using namespace std;
int a[310][310];
int dp[310][310];
int fangx[4][2]={{1,0},{0,1},{-1,0},{0,-1}};
int dfs(int i,int j){
if(dp[i][j]!=0){
return dp[i][j];
}
int res=0;
int k;
for(k=0;k<4;k++){
int m=i+fangx[k][0];
int n=j+fangx[k][1];
if((a[m][n]!=-1)&&(a[m][n]<a[i][j])){
int s=a[i][j];
a[i][j]=-1;
res=max(res,dfs(m,n)+1);
a[i][j]=s;
}
}
if(res==0){
res=1;
}
dp[i][j]=res;
return res;
}
int main(){
int r,c;
cin>>r>>c;
memset(a,-1,sizeof(a));
for(int i=1;i<=r;i++){
for(int j=1;j<=c;j++){
cin>>a[i][j];
}
}
int zuic=0;
for(int i=1;i<=r;i++){
for(int j=1;j<=c;j++){
dp[i][j]=dfs(i,j);
zuic=max(zuic,dp[i][j]);
}
}
cout<<zuic;
return 0;
}