记忆化搜索

我第一次见AClayton的滑雪代码的时候是2011年 我当时很迷茫,不知道什么是动态规划,不知道什么是搜索,时隔2年,已然很明白了,或许是自己真的走入了IT行业,所学所感,已然到了领悟的时候了,此时再写这个记忆化搜索,心情还是那样的兴奋,大概是对这个行业的热情所致,这个问题很经典,很好,我喜欢这样的题目,因为她不华丽的虚伪,她实在,如果想不通,那么也就写不出,当我用java走上IT征程的这一刻,我决定写下这个代码。

这就是记忆化搜索 搜索+动态规划

其实它的主要思想还是在于第一层的搜索,如果能简单的实现搜索,再加上最大连续字段和的思想(基础动态规划),那么这个问题的本质就被抓出来了,所谓的记忆是为下一次的搜索服务,记忆的方法,就是动态规划

    public void dfs(int x,int y)
    {
          for(int i=0;i<4;i++)
          {
         int tx=x+stepx[i];
         int ty=y+stepy[i];
         if(isInMap(tx,ty))
         {
         if(iscan(x,y,tx,ty))
         {
              if(mapping[x][y]+1>mapping[tx][ty])
              {
         mapping[tx][ty]=mapping[x][y]+1;
         //其实如果是单单一次搜索,显然根本就用不上这一段dp方法,
         // 这一段dp实际上是为后面的搜索做备份,当然这样也很合适,因为
         //这段dp记录的信息很有用
         //简单的搜一点出发,搜一条最长路径,那样实在是用不到dp的
         //再次验证的dp的实质,记忆化搜索
         dfs(tx,ty);
              }
         }
         }
          }

    }

    public static void main(String []args)
    {
    Sking s=new Sking();
    int max=0;
    s.createArray();
    for(int i=0;i<3;i++)
    {
    for(int j=0;j<3;j++)
    {
    s.dfs(i,j);
    }
   
    }
    for(int i=0;i<3;i++)
    {
    for(int j=0;j<3;j++)
    {
    if(max<s.mapping[i][j])
    max=s.mapping[i][j];
    System.out.print(s.mapping[i][j]+" ");
    }
    System.out.println();
   
    }
    System.out.println(max+1);
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值