AcWing 901. 滑雪
原题链接
简单
#include<bits/stdc++.h>
#define input(a) scanf("%d",&a)
using namespace std;
int f[404][404],s[404][404];
int r,c;
int goway[5][2]={{1,0},{0,1},{-1,0},{0,-1}};
int dfs(int i,int j){
int &fk=f[i][j];
if(fk!=0) return fk;
fk=1;
for(int k=0;k<4;k++){
int dx=i+goway[k][0];
int dy=j+goway[k][1];
if(dx>=1 && dy>=1 && dx<=r && dy<=c && s[dx][dy]<s[i][j]){
fk=max(fk,dfs(dx,dy)+1);
}
}
return fk;
}
int res=0;
int main(){
memset(f,0,sizeof f); //reset
cin>>r>>c;
for(register int i=1;i<=r;i++) for(register int j=1;j<=c;j++) input(s[i][j]); //input
for(register int i=1;i<=r;i++){ //row => r
for(register int j=1;j<=c;j++){ //c => c
res=max(dfs(i,j),res); //get value
}
}
cout<<res<<endl; //output
}