对5个点(把大于改为大于等于并添加新步骤0分)
#include<bits/stdc++.h>
using namespace std;
int n,m;
int sx[102][102],ax[102][102],dp[102][102],maxn;
int dfs(int x,int y){
if(sx[x][y]>sx[x-1][y]){
if(ax[x-1][y]==1){
dp[x][y]=max(dp[x][y],dp[x-1][y]+1);
}else{
dp[x][y]=max(dp[x][y],dfs(x-1,y)+1);
}
}
if(sx[x][y]>sx[x+1][y]){
if(ax[x+1][y]==1){
dp[x][y]=max(dp[x][y],dp[x+1][y]+1);
}else{
dp[x][y]=max(dp[x][y],dfs(x+1,y)+1);
}
}
if(sx[x][y]>sx[x][y-1]){
if(ax[x][y-1]==1){
dp[x][y]=max(dp[x][y],dp[x][y-1]+1);
}else{
dp[x][y]=max(dp[x][y],dfs(x,y-1)+1);
}
}
if(sx[x][y]>sx[x][y+1]){
if(ax[x][y+1]==1){
dp[x][y]=max(dp[x][y],dp[x][y+1]+1);
}else{
dp[x][y]=max(dp[x][y],dfs(x,y+1)+1);
}
}
ax[x][y]=1;
return dp[x][y];
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>sx[i][j];
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
maxn=max(dfs(i,j),maxn);
}
}
cout<<maxn<<endl;
return 0;
}