LemonChay @ 2019-09-08 08:27:29
#include<iostream>//记忆化搜索
#include<cstdlib>
using namespace std;
int a[1002][1002],b[1002][1002];//a表示各个点的高度,b表示每一个点最远能滑到的距离
int i,j,n,m,maxn=-1;
int f(int x,int y,int t)//x,y表示当前的坐标,t表示当前的步数
{
if(b[x][y]!=0) return b[x][y]+1;
int l1=0,l2=0,l3=0,l4=0,maxnn=-1;
if(x-1>=1&&a[x-1][y]<a[x][y])l1=f(x-1,y,t+1);//上移
if(x+1<=n&&a[x+1][y]<a[x][y])l2=f(x+1,y,t+1);//下移
if(y-1>=1&&a[x][y-1]<a[x][y])l3=f(x,y-1,t+1);//左移
if(y+1<=n&&a[x][y+1]<a[x][y])l4=f(x,y+1,t+1);//右移
if(l1>l2&&l1>l3&&l1>l4) maxnn=l1;
if(l2>l1&&l2>l3&&l2>l4) maxnn=l2;
if(l3>l1&&l3>l2&&l3>l4) maxnn=l3;
if(l4>l1&&l4>l2&&l4>l3) maxnn=l4;
if(l1==l2&&l2==l3&&l3==l4) maxnn=l1;
if(maxnn>b[x][y]) b[x][y]=maxnn;
return maxnn+1;
}
int main()
{
cin>>n>>m;
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
cin>>a[i][j];
}
}
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
int p=f(i,j,1);
if(p>maxn) maxn=p;
}
}
cout<<maxn;
return 0;
}
by GAVI824 @ 2019-09-08 08:31:06
那个题?