思路
记忆化搜索
C++ 代码
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
const int N=510;
int n,m;
bool st[N][N];
int h[N][N];
int f[N][N];
int rou[4][2]={0,1,0,-1,1,0,-1,0};
int dfs(int x,int y){
if(st[x][y]) return f[x][y];
f[x][y]=1;
st[x][y]=true;
int maxm=0;
for(int i=0;i<4;i++) {
int xi=x+rou[i][0];
int yi=y+rou[i][1];
if(xi<1||xi>n||yi<1||yi>m||h[xi][yi]>=h[x][y]) continue;
maxm=max(maxm,dfs(xi,yi));
}
f[x][y]+=maxm; // 用f[x][y] 记录结果
return f[x][y];
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) cin>>h[i][j];
int len=-1;
for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) len=max(len,dfs(i,j));
cout<<len<<endl;
return 0;
}