记忆化搜索,四个方向取最大。
#include<stdio.h>
#include<iostream>
#include<string.h>
#include<vector>
#include<map>
#include<algorithm>
using namespace std;
int a[110][110];
int book[110][110];
int d[4][2] = {1,0,0,1,-1,0,0,-1};
int dfs(int x,int y);
int n,m;
int main(){
scanf("%d%d",&n,&m);
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
scanf("%d",&a[i][j]);
}
}
memset(book,0,sizeof(book));
int ans = 0;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
ans = max(ans,dfs(i,j));
}
}
printf("%d\n",ans);
return 0;
}
int dfs(int x,int y){
if(book[x][y]!=0) return book[x][y];
else{
int ans = 1;
for(int k=0;k<4;k++){
int temp = 0;
int i = x+d[k][0];
int j = y+d[k][1];
if(i>=0&&i<n&&j>=0&&j<m&&a[x][y]>a[i][j]){
temp = dfs(i,j) + 1;
ans = max(ans,temp);
}
}
book[x][y] = ans;
return ans;
}
}