思路:记忆化,dfs
#include <cstdio>
#include <iostream>
#include <cstring>
using namespace std;
int r,c;
int map[110][110],f[110][110];
int dx[5]={0,-1,0,1,0};
int dy[5]={0,0,1,0,-1};
bool check(int a,int b){
if(a>r||b>c||a<1||b<1) return false;
return true;
}
int search(int x,int y) {
int cnt=1,nx,ny;
if(f[x][y]>0) return f[x][y];
for(int i=1;i<=4;i++) {
nx=x+dx[i];
ny=y+dy[i];
if(check(nx,ny)&&map[x][y]<map[nx][ny]) {
cnt=max(search(nx,ny)+1,cnt);//找到四个方向中最好的一个
}
}
f[x][y]=cnt;
return cnt;
}
int main() {
int ans=0;
scanf("%d%d",&r,&c);
for(int i=1;i<=r;i++)
for(int j=1;j<=c;j++)
scanf("%d",&map[i][j]);
for(int i=1;i<=r;i++) {
for(int j=1;j<=c;j++) {
f[i][j]=search(i,j);
ans=max(ans,f[i][j]);
}
}
printf("%d\n",ans);
return 0;
}