红书上的几道搜索例题

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就好了

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

时间: 2024-10-07 05:31:13

红书上的几道搜索例题的相关文章

[转] 如何把书上的字弄到电脑

研究生和上班族都学学吧,如何把书上的字弄到电脑!!!! 把书上的字快速弄到电脑上,我也会,哇哇...在工作中,我常常在想,要是能把纸上有用的文字快速输入到电脑中,不用打字录入便可以大大提高工作效率该有多好呀!随着科技的发展, 这个问题在不断的解决,例如,现在市场上的扫描仪就带有OCR软件,可以把扫描的文字转换到电脑中进行编辑.但是,对于我们平常人来说,大多数人都是即不想多花钱购买不常用的设备,又不想费力气打字录入,那我就给大家提供一个我刚刚发现的方法吧!现在数码相机很普遍,也很常用,我们就从这里

红黑树上的连接操作

a)①对于插入调整红黑树性质函数,注意到只有case1才会增加黑高,引用书中的图13-5所示 不管是a图还是b图,结点C从左图到右图黑高增加了1.其他结点黑高均无变化.具体13-5和13-6图所有结点黑高可以 参考13.3-3题目答案. ②对于删除调整红黑树性质函数,可以使用13.3-3类似的方法计算其黑高变化,结果就是case2的B结点减少1,case4结点D增加1,结点B减少1.(请参考图13-7)其他case和结点均无变化. ③对于删除函数如果是第3种情况,需要找到删除结点的后继,那么我们

讲故事高手写的的谈判手册——Leo鉴书上64

正如本书名字所显示的"谈判无处不在",作者从不同角度分析了决定谈判成败的因素,同时具体地给出对策.书的排版不错,是那种适合车上读,读起来有收获又不太累的方式. 书能给读者不少启示,具体来说有三点:如何讲故事,如何区别对待对手,让自己变成一个具体的人而不是纸上的名字. 人人想成为讲故事的高手,认真看本书能学到如何讲.以我个人的经验来看,找到好素材.讲出好故事和把好故事写下来让读者笑完全是极困难的三件事,这其中有不同的逻辑.需要不同的能力,本书在这方面不是简单的做到,而是做得比较到位.刚翻

HW3书上习题

测试: 书上习题: a) b)比如循环测试错误:while(numPrimes < 3) c)n=1 d) 节点覆盖: {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14} 边覆盖: {(0,1), (1,2), (1,10), (2,3), (3,4), (3,7), (4,5), (4,6), (6,3), (5,7), (7,8), (7,9), (8,9), (9,1), (10,11), (11,12), (11,14), (12,13), (13,11)} 主路径

Java 初学 第一弹--编译并运行书上的简单程序(猜数字小游戏)

(博主原创) 首先说明一下,博主是大一上学期结束寒假时自己看的Java,然后我看的是Head First Java的中文版,因为大一学了c,所以里面的一些基本思想还是了解的,在看这本书时就浏览了一下(就是那种光看没有自己动手去敲代码的),然后看到书上的一个猜数字小游戏,就想手动敲一下,熟悉熟悉Java的语法,但是真正去做时,发现比看起来要困难一些. 首先是Java在建立一个源码文件之前要先建一个package,然后我用的Eclipse写的Java(感觉和pycharm风格差不多),再新建一个文件

书上的美来自生活

童年,是人生最美好的阶段. 一个人对生活审美感受的培养,最好的阶段,也是在童年.童年的世界,是五彩斑斓的,要投身于这五彩斑斓的世界中,并在心底里,深深地爱上它们.那么,五彩斑斓的光,投射到文字里,就会像梦幻一般,闪烁着童稚而纯朴的美. 也就是说,好的作文,要从生活中来. 这样,我们就必须要有一颗懂得观察生活的心.冰雪的融化,春草的发芽,小虫子的爬行,蚂蚁的决战,云的倏忽飞动,鸟的腾挪跌宕,等等,这一切都要留意观察.还有,雨后的蛙声,晚秋的蝉鸣,高枝上的莺啼,耕作的老牛的哞叫,你们都要留意,去听,

在ubuntu16.04上安装有道词典

参考来源:http://www.cnblogs.com/scplee/archive/2016/05/13/5489024.html 在ubuntu16.04上安装有道词典主要是解决依赖问题,我们在配置文件中把依赖文件删除,就行了 第一步:下载有道词典的.deb包 第二步:创建youdao文件,然后把有道的源文件解压到这个包里 sudo dpkg -X sudo dpkg -X ./youdao-dict_1.1.0-0-ubuntu_amd64.deb youdao 第二步:解压deb包中的c

模仿之中也少不了创新——Leo鉴书上65

模仿不就是抄吗?这也需要创新? 答案是:不但需要,而且非常需要.<模仿的力量>从独特的角度全市了模仿的概念以及成功和失败的应用,还有就是如何才能成功模仿让好东西为我们所用,我理解--只有在充分理解原型的前提下.准确解码.加以足够的创新模仿才可能真正成功,才可能为大家带来价值. 书里给我印象最深的要算竞争者模仿西南航空的例子(从56页开始,后面多少都有涉及),有些竞争都模仿之后走向了衰亡,而有些竞争者模仿西南看航空之后让自己赢得了新的生命力."疯狂降低成本,节约.节约.再节约!&quo

如何在Linux上提高文本的搜索效率

对于系统管理员或程序员来说,当需要在复杂配置的目录中或者在大型源码树中搜寻特定的文本或模式时,grep类型的工具大概是最受欢迎的. 如果grep是你最喜欢的工具之一,那么你可能会更喜欢ack.ack是一个基于Perl的类似于grep的命令行工具,但是搜索速度更快,能力比grep更强.尤其是当你是程序员时,我强烈推荐你使用ack来取代grep. ack的用法非常适用与代码搜索,因此程序员可以在源码树中进行复杂的查询,而只需要更少的按键. ack的特性 ack的一些非常强大的特性: 默认搜索当前工作