int se(int x,int y)
{
int tx,ty,te,tt;
if(p[x][y]>0)
return p[x][y];//p[x][y]>0说明之前已经算过直接返回该值(注:去掉这句话只得1分)
tt=1;
for(int i=0;i<4;i++)//进行四个方向的搜索
{
tx=x+cx[i];ty=y+cy[i];
if(tx>=1&&tx<=r&&ty>=1&&ty<=c&&a[tx][ty]>a[x][y])
{
te=se(tx,ty)+1;//动态规划在之前的的状态加1
if(te>tt) tt=te;//找出最长的一个
}
}
p[x][y]=tt;
return tt;
}
以上为该题的主要代码
在符合条件的范围内向上下左右遍历,找到下一个点能滑行的长度
跟递归有点类似
但是看着一段
if(p[x][y]>0)
return p[x][y];
如果已经访问过这个点,那它就是有值的,返回就行了,不用再算
理解了思路,这道题还不算太难,一般难吧