ysj1173886760 @ 2018-04-17 13:22:31
using namespace std;
int dx[4]={1,0,0,-1},dy[4]={0,1,-1,0};
int map1[110][110],dp[110][110]; //dp[i][j]为第i,j个格子开始滑,所能滑的最大长度
int r,c,ans;
int dfs(int x,int y)
{
if(dp[x][y])return dp[x][y]; //如果搜过,直接返回
bool ok=false;
for(int i=0;i<4;i++)
{
int nx=x+dx[i];
int ny=y+dy[i];
if(map1[x][y]>map1[nx][ny]&&nx>=1&&ny>=1&&nx<=r&&ny<=c)
{
ok=true;
dp[x][y]=max(dp[x][y],dfs(nx,ny)+1);
}
}
if(!ok)dp[x][y]=1; //如果无法再拓展,则长度为1;
return dp[x][y];
}
int main()
{
cin>>r>>c;
for(int i=1;i<=r;i++)
for(int j=1;j<=r;j++)
cin>>map1[i][j];
for(int i=1;i<=r;i++) //每一个点都搜一遍
for(int j=1;j<=r;j++)
ans=max(ans,dfs(i,j));
cout<<ans;
return 0;
}
by ysj1173886760 @ 2018-04-17 13:35:45
明白了,不用回了,感谢