[SHOI2002]滑雪
记忆化搜索的模板qwq
#include
#include
#include
using namespace std;
int R,C,map[101][101],ans,f[101][101],len;
int dx[4]={1,-1,0,0},
dy[4]={0,0,-1,1};
int read(){
int x=0,f=1;
char c=getchar();
while(c>'9'||c<'0'){
if(c=='-')f=-1;
c=getchar();
}
while(c>='0'&&c<='9'){
x=x*10+c-'0';
c=getchar();
}
return x*f;
}
int dfs(int x,int y){
if(f[x][y])return f[x][y];
int l=1;
for(int i=0;i<4;i++){
int Nowx=x+dx[i];
int Nowy=y+dy[i];
if (Nowx>0&&Nowx<=R&&Nowy>0&&Nowy<=C&&map[x][y]>map[Nowx][Nowy])
l=max(dfs(Nowx,Nowy)+1,l);
}
f[x][y]=l;
return l;
}
int main(){
R=read(),C=read();
for(int i=1;i<=R;i++)
for(int j=1;j<=C;j++)
map[i][j]=read();
for(int i=1;i<=R;i++)
for(int j=1;j<=C;j++){
len=dfs(i,j);
f[i][j]=len;
ans=max(f[i][j],ans);
}
printf("%d",ans);
return 0;
}