zoukankan      html  css  js  c++  java
  • 红书上的几道搜索例题

    Holedox Moving poj 1324

    题意:贪吃蛇,n*m的网格,蛇长度《=8,给出蛇的每个身体的位置,求到(1,1)点的最短距离

      http://www.cnblogs.com/longdouhzt/archive/2011/11/17/2253233.html这个xjb搞,效果还是不错的

    分析:状态数一定,目标一定,压缩状态然后bfs,但是每一位都用(x,y)来表示状态太大,那么还要转换状态,蛇头位置显然要表示,那么剩下的身体只要知道上一段身体在哪,就可以知道现在的坐标了,那么,可以(x,y)+7位相当于上一位往哪个方向移动,这样,状态总数20*20*4^7,这样来bfs问题就不大了,直接bfs姿势不好显然会T,移动蛇身的时候,用位运算位移一下,queue一定要开在外面,否则会RE,自己模拟队列也行,这样就可以过了,时间大约要1300ms左右,剩下的就是如何剪枝了,Alpha-Beta,剩下的就是上界和下界的设计

      1.下界显然可以忽略蛇身,舌头直接到目的地的距离,上界,显然可以用舌头移动,把蛇身当作障碍物,这样的距离当作下界,酱紫,就可以很快得到答案

     Mines For Diamonds uva 10605

    n*m的矿区,里面有一些钻石,需要挖掘一些矿道,使得每个钻石都与外界相同,矿道不得交叉,求最小挖掘距离

       搜索题,盲目搜索,随机选择一个边界,然后所有的钻石都被挖通,显然是行不通的,简单的想法就是加入最优性剪枝,当前的最优解为L,已挖掘的为x,估计符合条件的最少f,x+f>L,减去

      直接把剩下所有钻石到现在的距离作为上界,效果并不是很好,弱化条件,矿道不能交叉,弱化为矿道仅可以在钻石处交叉,这样,可以把钻石当作点,每两个钻石处连一条边,然后MST作为下界

      还有人这么做,处理出所有点和边之间的最小距离,然后枚举点之间的顺序,贪心该挖掘顺序的最小花费

    最神奇的是,这个题根本不是搜索,是个状压dp,处理出每个点到边界的最小距离,点之间的距离就是曼哈顿距离,然后状压dp就好了

      不过上述做法都有一个缺陷,没有证明交叉的矿道不是最优解,然而我并没有证明出来

  • 相关阅读:
    Promises-小程序购物车结算
    微信小程序支付
    微信企业付款到零钱
    Ubuntu16 远程连接MySQL
    MySQL数据库中文变问号
    Ubuntu开启ApacheRewrite功能
    大数据2018:云存储已在客观层面扮演数据湖角色
    地平线发布兼具本地端抓拍与识别功能的嵌入式AI摄像机
    肥皂遇上黑科技!异味统统都走开!
    LG新专利或用于移动VR,可通过外部旋钮调节显示屏与透镜
  • 原文地址:https://www.cnblogs.com/jihe/p/5931755.html
Copyright © 2011-2022 走看看