Openjudge 1088:滑雪

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];

如果已经访问过这个点,那它就是有值的,返回就行了,不用再算

理解了思路,这道题还不算太难,一般难吧

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值