50道hdu基础搜索总结(转)

Dfs:

大部分是直接递归枚举,即求满足约束条件下的解,虽不用剪枝,但也需要代码能力。

练习递归枚举的题目:

1241       Oil Deposits (dfs的连通块个数)

1016       Prime Ring Problem

1584       蜘蛛牌(简单dfs,简单的剪枝,还有人用DP做(???))

1426       Sudoku Killer(练习递归的好题目
or Dancing links(???))

2510       符号三角形(打表题,写写打表程序还是不错的)

2553      
N皇后问题(在n较小时,是经典的练习递归枚举的题目,n较大时状压(???))

2677       Dota all stars( 单纯练习递归的题目+串的处理 )

3350       #define is unsafe
(练习递归的好题目)(用结构体做返回值同时返回多个参数)

3290       The magic apple
tree(练习递归的题目,但有些坑)

2821       Pusher( 看上去有点吓人,实际是简单题,搜就好了 )

2782       The Worm Turns(实际是简单题,搜就好了)

2616       Kill the monster(bfs+位运算 或 dfs 或
STL枚举全排列,总之,就是暴力……)

3500       Fling(实际是简单题,搜就好了)

2514       Another Eight Puzzle

1547       Bubble Shooter(思路是搜两次,dfs或bfs)

1175       连连看(dfs 或 bfs)

1728       逃离迷宫(和连连看一样)

剪枝:

典型题目:

1010       Tempter of the
Bone(标准迷宫dfs,学习剪枝的开始)

学习了: 极限情况下的剪枝

    奇偶性剪枝

    (从(a,b)走到(c,d) 若a+b 
c+d 
奇偶性相同,需要走偶数步;否则走奇数步)

1455       Sticks(剪枝的好题目,黑书例题,坑了我好久的说)

学习了:  排序后解答树同层避免重复搜索

调整法(全集不行与子集肯定不行)

想法:每根小棍子都要被配对,当前情况下第一根无法配对,直接return

避免重复的题目还有:

1258       Sum It Up

2610       Sequence one(
让我认识了 stable_sort()  )

2611       Sequence two( 在”2610 Sequence
one”的基础上稍加修改即可)

Bfs:

一些简单题目:

1180       诡异的楼梯 (bfs可以加自己)

2102       A计划

1240       Asteroids! (单纯的三维bfs )

1253       胜利大逃亡 (单纯的三维bfs,加个剪枝:
a+b+c-3>limit快了一倍)

1548       A strange lift

2717       Catch That Cow

1372       Knight Moves(或【双广】也可以)

1312       Red and Black

2612       Find a way

2531       Catch
him

1252       Hike on a Graph

找状态hash判重很重要

帮助我理解“状态”的题目:

1732       Push Box(8维数组hash状态)

1429       胜利大逃亡(续)

理解:

  一开始不知道怎么搜

  和队友探讨,让我认识到 宽搜是很盲目,很随意的事情

  搜就好了,碰到目标节点再说

“状态”练习题目:

1254      
推箱子         ( bfs套bfs,走过的点还可以再走 )

1495       非常可乐(白书的例题—“倒水问题”)

2364       Escape

2579       Dating with girls(2)

1104      
Remainder(自己在做的过程中逐渐找到了”状态”,和数论沾点边)

在bfs中经常碰到这样一类问题,加入节点的顺序与队列中节点的单调性不一致,这个时候用到优先队列来代替普通队列。我自己是用一个delay(延迟标记),让这类节点先只向自己拓展,之后再向其他节点拓展。

“延迟”相关题目:

1240       Rescue (可以加自己,延迟入门)

4198       Quick out of the Harbour

1206       Ignatius and the Princess
I(性价比高的宽搜题目)

2416       Treasure of theChimpIsland

2653       Waiting ten thousand years for
Love

( 从这里引入了Dijkstra 最短路算法??????? )

还有就是【双向广搜】

碰到了几道可以用双广解决的题目,用普通bfs也可以:

1401      
Solitaire       (【双广】,用普通bfs也能过)(好题)

1195       Open the
Lock(普通bfs,状态,或【双广】)

一个问题:

判重用数组有时是严重浪费的,状态并没有那么多,但为了能完全表示,浪费了很多空间,甚至开不下数组,这个时候用hash技术……(还不太会%>_<%)

Dfs&Bfs:

1044       Collect More Jewels(好题)

这个题目提供了一种思路:

bfs预处理构造隐式图,然后dfs枚举所有情况求出最优解

1072       Nightmare(和上题同样的思路)

1983       Kaitou Kid - The Phantom Thief (2)
(好题)(dfs枚举可能情况,然后bfs判定是否可行)

50道hdu基础搜索总结(转),布布扣,bubuko.com

时间: 2024-12-21 22:39:33

50道hdu基础搜索总结(转)的相关文章

6、50道JAVA基础编程练习题跟答案

1 50道JAVA基础编程练习题 2 [程序1] 3 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 4 程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21.... 5 public class Prog1{ 6 public static void main(String[] args){ 7 int n = 10; 8 System.out.println("第"+n+

50道JAVA基础编程练习题

50道JAVA基础编程练习题[程序1]题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21....public class Prog1{public static void main(String[] args){ int n = 10; System.out.println("第"+n+"个月兔子总数为"+f

2017常见的50道java基础面试题整理(附答案)

1.作用域public,private,protected,以及不写时的区别 答: 区别如下: 2.Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口) 答: 匿名的内部类是没有名字的内部类.不能extends(继承) 其它类,但一个内部类可以作为一个接口,由另一个内部类实现 3.Static Nested Class 和 Inner Class的不同 答: Nested Class (一

50 道 CSS 基础面试题及答案

1 介绍一下标准的CSS的盒子模型?与低版本IE的盒子模型有什么不同的? 标准盒子模型:宽度=内容的宽度(content)+ border + padding + margin 低版本IE盒子模型:宽度=内容宽度(content+border+padding)+ margin 2 box-sizing属性? 用来控制元素的盒子模型的解析模式,默认为content-box context-box:W3C的标准盒子模型,设置元素的 height/width 属性指的是content部分的高/宽 bo

2019年最新50道java基础部分面试题

[软帝学院]1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语法,集合的语法,io 的语法,虚拟机方面的语法. 1.一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制?  可以有多个类,但只能有一个public的类,并且public的类名必须与文件名相一致. 2.Java有没有goto?  java中的保留字,现在没有在java中使用. 3.说说&和&&的区别.  &和&

2019年最新50道java基础部分面试题(三)

前21题请看之前的随笔 22.面向对象的特征有哪些方面 计算机软件系统是现实生活中的业务在计算机中的映射,而现实生活中的业务其实就是一个个对象协作的过程.面向对象编程就是按现实业务一样的方式将程序代码按一个个对象进行组织和编写,让计算机系统能够识别和理解用对象方式组织和编写的程序代码,这样就可以把现实生活中的业务对象映射到计算机系统中. 面向对象的编程语言有封装.继承 .抽象.多态等4个主要的特征. 1封装: 封装是保证软件部件具有优良的模块性的基础,封装的目标就是要实现软件部件的“高内聚.低耦

50道 CSS 基础面试题(附答案)

1.介绍一下标准的CSS的盒子模型?与低版本IE的盒子模型有什么不同的? 标准盒子模型:宽度=内容的宽度(content)+ border + padding + margin低版本IE盒子模型:宽度=内容宽度(content+border+padding)+ margin 2.box-sizing属性? 用来控制元素的盒子模型的解析模式,默认为content-boxcontent-box:W3C的标准盒子模型,设置元素的 height/width 属性指的是content部分的高/宽borde

2019年最新50道java基础部分面试题(二)

前11题请看上一篇文章 12.静态变量和实例变量的区别?  在语法定义上的区别:静态变量前要加static关键字,而实例变量前则不加. 在程序运行时的区别:实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变量才会被分配空间,才能使用这个实例变量.静态变量不属于某个实例对象,而是属于类,所以也称为类变量,只要程序加载了类的字节码,不用创建任何实例对象,静态变量就会被分配空间,静态变量就可以被使用了.总之,实例变量必须创建对象后才可以通过这个对象来使用,静态变量则可以直接使用类名来引用.

2019年最新50道java基础部分面试题(四)

前35题请移步上几篇文章 36.数组有没有length()这个方法? String有没有length()这个方法?  数组没有length()这个方法,有length的属性.String有有length()这个方法. 37.下面这条语句一共创建了多少个对象:String s="a"+"b"+"c"+"d"; 答:对于如下代码: String s1 = "a"; String s2 = s1 + "