#include<iostream>
#include<cstdio>
using namespace std;
int num,n,m,a[1000][1000],d[1000][1000],maxx;
int dp(int i,int j){
if(d[i][j]!=-1) return d[i][j];
if(i-1>=1&&a[i-1][j]<a[i][j])
d[i][j]=max(d[i][j],dp(i-1,j));
if(i+1<=n&&a[i+1][j]<a[i][j])
d[i][j]=max(d[i][j],dp(i+1,j));
if(j+1<=m&&a[i][j+1]<a[i][j])
d[i][j]=max(d[i][j],dp(i,j+1));
if(j-1>0&&a[i][j-1]<a[i][j])
d[i][j]=max(d[i][j],dp(i,j-1));
d[i][j]++;
return d[i][j];
}
int main(){
maxx=-1;
cin>>n>>m;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++){
cin>>a[i][j];
d[i][j]=-1;
}
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
maxx=max(maxx,dp(i,j));
cout<<maxx+1<<endl;
}
poj1088 滑雪 动态规划+回溯
最新推荐文章于 2022-04-18 12:00:07 发布