关于ACM的深搜和广搜以及动态规划

求推荐几个基本类型的题,还有提供几个比较简单的完整代码做解释,先不考虑剪枝之类的,只是想了解什么是DFS BFS 以及具体哪类题目可以用。如何用代码实现(要用c语言的,本人新手只会c,网上的代码好多c++,c写的又感觉太难。。。(能简单简介一下最好了,本人做的POJ 的sticks题,那个和搜索什么关系?思路是怎么样的?)(提供链接或具体那本书有介绍也可以,回答好的有加分)

你好,亲,这段讲解使我们集训队代课老师给我们的,希望有帮助。
搜索算法阶段性总结:
BFS与DFS的讨论:BFS:这是一种基于队列这种数据结构的搜索方式,它的特点是由每一个状态可以扩展出许多状态,然后再以此扩展,直到找到目标状态或者队列中头尾指针相遇,即队列中所有状态都已处理完毕。
DFS:基于递归的搜索方式,它的特点是由一个状态拓展一个状态,然后不停拓展,直到找到目标或者无法继续拓展结束一个状态的递归。

优缺点:BFS:对于解决最短或最少问题特别有效,而且寻找深度小,但缺点是内存耗费量大(需要开大量的数组单元用来存储状态)。
DFS:对于解决遍历和求所有问题有效,对于问题搜索深度小的时候处理速度迅速,然而在深度很大的情况下效率不高

总结:不管是BFS还是DFS,它们虽然好用,但由于时间和空间的局限性,以至于它们只能解决数据量小的问题。

各种搜索题目归类:

坐标类型搜索 :这种类型的搜索题目通常来说简单的比较简单,复杂的通常在边界的处理和情况的讨论方面会比较复杂,分析这类问题,我们首先要抓住题目的意思,看具体是怎么建立坐标系(特别重要),然后仔细分析到搜索的每一个阶段是如何通过条件转移到下一个阶段的。确定每一次递归(对于DFS)的回溯和深入条件,对于BFS,要注意每一次入队的条件同时注意判重。要牢牢把握目标状态是一个什么状态,在什么时候结束搜索。还有,DFS过程的参数如何设定,是带参数还是不带参数,带的话各个参数一定要保证能完全的表示一个状态,不会出现一个状态对应多个参数,而这一点对于BFS来说就稍简单些,只需要多设置些变量就可以了。
经典题目:细胞(NDK1435)、Tyvj:乳草的入侵、武士风度的牛

数值类型搜索:(虽然我也不知道该怎么叫,就起这个名字吧),这种类型的搜索就需要仔细分析分析了,一般来说采用DFS,而且它的终止条件一般都是很明显的,难就难在对于过程的把握,过程的把握类似于坐标类型的搜索(判重、深入、枚举),注意这种类型的搜索通常还要用到剪枝优化,对于那些明显不符合要求的特殊状态我们一定要在之前就去掉它,否则它会像滚雪球一样越滚越大,浪费我们的时间。
经典题目:Tyvj:派对;售货员的难题,以及各种有关题目搜索算法阶段性总结

你好,明天可以发你几道这类题,而且还有代码,亲。追问

谢谢了,想法我懂,就是不知道具体怎么在题中用,Q1544967987,顺便加个好友吧,你们还有集训队啊。。。。。

追答

对啊,你们没有的,我们是老师带领着我们的

追问

额。。。。你东西记得发啊。。。还有记得加好友。。。你是几年级的。。。

追答

不好意思,你说发什么东西?好友加了。我大一

温馨提示:内容为网友见解,仅供参考
无其他回答

关于ACM的深搜和广搜以及动态规划
BFS与DFS的讨论:BFS:这是一种基于队列这种数据结构的搜索方式,它的特点是由每一个状态可以扩展出许多状态,然后再以此扩展,直到找到目标状态或者队列中头尾指针相遇,即队列中所有状态都已处理完毕。DFS:基于递归的搜索方式,它的特点是由一个状态拓展一个状态,然后不停拓展,直到找到目标或者无法继续...

国际acm程序设计大赛需要准备哪些知识?全面的,最好有书名
二分、三分、深搜、广搜、KMP、HASH 数学相关:基础数论(素数分解,欧拉函数,拓展欧几里得等等),计算几何,高斯消元,polay计数,莫比乌斯反演 博弈论:基本博弈,SG函数,ANTI-SG,Every-SG,不平等博弈 图论:最短路,最小树,最大流等等。(原谅我图论会的不多)动态规划:背包问题,数位dp,状压...

参加ACM大赛应该准备哪些课程?
课程:(1)基本算法: 二分,分治,贪心 (2) 离散数学离散数学动态规划 (3) 搜索算法:深度优先 搜索,广度优先搜 A*算法 ,阿尔法贝塔剪枝 (4)数据结构: 线段树, 树状数组,并查集,Trie图 (5)图论问题:最小生成树 最短路 强连通分量、桥和割点 (6)网络流算法:基本的网络流算法,Di...

请教做ACM的常用算法..还是菜鸟
(3)深搜的优化:尽量用位运算、一定要加剪枝、函数参数尽可能少、层数不易过大、可以考虑双向搜索或者是轮换搜索、IDA*算法. (poj3131,poj2870,poj2286) 五.动态规划 (1)需要用数据结构优化的动态规划. (poj2754,poj3378,poj3017) (2)四边形不等式理论. (3)较难的状态DP(poj3133) 六.数学 (1)组...

ACM暑假集训方法
(3)双端队列和它的应用(维护一个单调的队列,常常在动态规划中起到优化状态转移的 目的). (poj2823)(4)左偏树(可合并堆).(5)后缀树(非常有用的数据结构,也是赛区考题的热点).(poj3415,poj3294)四.搜索 (1)较麻烦的搜索题目训练(poj1069,poj3322,poj1475,poj1924,poj2049,poj3426)(2)广搜...

一个关于广搜和深搜的问题(pascal)
广搜得到的往往是最优值,因为它是按照节点深度递增的次序访问的。但由于需要记录当前深度的所有节点,因而需要的空间开销大。深搜只需要记录当前路径上的节点,因而开销较小,但没有广搜“递增”的次序,无法高效地求出最优解,因此一般用作求所有解。只需要遍历所有点或所有情况的时候,两者都可以。有...

请给出深搜和广搜的区别和中心思想!
如果要求出最优解的话,一种方法将是后面要介绍的动态规划法,另一种方法是修改原算法:把原输出过程的地方改为记录过程,即记录达到当前目标的路径和相应的路程值,并与前面已记录的值进行比较,保留其中最优的,等全部搜索完成后,才把保留的最优解输出。二、广度优先搜索法的显著特点是:(1)在...

参加ACM大赛应该准备哪些课程?
(3)深搜的优化:尽量用位运算、一定要加剪枝、函数参数尽可能少、层数不易过大、可以考虑双向搜索或者是轮换搜索、IDA*算法. (poj3131,poj2870,poj2286) 五.动态规划 (1)需要用数据结构优化的动态规划. (poj2754,poj3378,poj3017) (2)四边形不等式理论. (3)较难的状态DP(poj3133) 六.数学 (1)组...

广搜与深搜的区别
1、搜索空间 广搜(Breadth-First Search,BFS)是按照广度优先的顺序搜索,从根节点开始,首先搜索距离根节点最近的节点,然后再逐渐向外扩展。因此,广搜的搜索空间呈现出一种层次结构,类似于树或图。深搜(Depth-First Search,DFS)则是按照深度优先的顺序搜索,从根节点开始,一直深入下去,直到找到...

给我一些pascal题目:关于深搜,广搜的
. Faibonacci数列前几项为: 0,1,1,2,3,5,8,…,其规律是从第三项起, 每项均等于前两项之和。求前30项, 并以每行5个数的格式输出。. Faibonacci数列前几项为: 0,1,1,2,3,5,8,…,其规律是从第三项起, 每项均等于前两项之和。求前30项, 并以每行5个数的格式输出。

相似回答