随笔分类 - 算法竞赛入门经典2第七章
好吧,第六章最后没填,等笔者后面刷题的时候回来填了,现在全速前进
摘要:Firetruck: 较为简单的dfs,注意对于正在访问的结点的vis标记,同时如果有TLE的错误,需要先判断1是否能到达k,因为如果这是一个1-19的全通图,但是到达不了20,dfs是需要19!远远大于11,肯定会超时的 点击查看代码 #include<iostream> #include<cst
阅读全文
摘要:Zombie's Treasure Chest: 点击查看笔者代码 #include<iostream> #include<algorithm> using namespace std; typedef unsigned long long ull; ull gcd(ull a, ull b) {
阅读全文
摘要:迭代加深搜索是一个应用范围很广的算法,不仅可以像回溯法那样找一个解,也可以像状态空间搜索那样找一条路径 迭代加深搜索最经典的例子就是埃及分数 这道题目理论上可以用回溯法求解,但是解答树非常恐怖,不仅深度没有明显的上界,而且加数的选择在理论上也是无限的,也就是说,BFS可能会无限拓宽,DFS会无限往深
阅读全文
摘要:本题主要是存储的问题,在存储上笔者原先的代码占用了大量的内存空间 这边笔者采用暴力的思想直接硬开所有情况的16^6的数组来存储该问题,当然这在时间上是十分浪费的,因为初始化实在太慢了,剩下的就是状态转移,以及隐式图的相关思路 点击查看笔者代码 #include<iostream> #include<
阅读全文
摘要:Fill 这边笔者认为是通过priority_queue优先队列来解决此类问题,当然倒水量越少,其优先度越高 当然还需要注意的是对数据的存储,因为这里的水量是固定的,因此只要知二得一,因此实际存储各个杯子水量的时候只要存储两个杯子得水量就可以了,同时memset对于大数组得初始化可以说是很慢的,尽量
阅读全文
摘要:第6章介绍过图的遍历,很多问题都可以归结为图的遍历,但这些图不是事先给定的,而是由程序动态生成的,称为隐式图 本节和前面介绍的回溯法不同,回溯法一般是要找到一个(或者所有)满足约束的解,(或者某种意义下的最优解),而状态空间搜索一般是要找到一个从初始状态到终止状态的路径 路径寻找问题可以归结为隐式图
阅读全文
摘要:笔者偷懒了一会儿,又回来补题解了 Prime_Ring_Problem: 很朴素的一道题目,注意剪枝即可(否则16!很容易TLE,MLE),判断条件就是相邻两数之和不是素数就返回 点击查看笔者代码 #include<iostream> #include<cstring> #include<queue
阅读全文
摘要:7.2.3 解答树 这棵树的第0层有n个子节点,第1层有(n-1)个子结点,第二层有(n-2)个子节点,...,第n层就没有子节点了,即第n层的结点都是叶子结点,总共有n!个结点 由于这棵树是从无到有逐渐生成完整解的过程,因此将其称为解答树 如果某问题的解可以由多个步骤得到,而每个步骤都有若干种选择
阅读全文
摘要:有没有想过如何打印所有排列呢?输入整数n,按字典序从小到大的顺序输出前n个数的所有排列。两个序列的字典序大小关系等价于从头开始第一个不相同位置处的大小关系 eg:(1,3,2)<(2,1,3),字典序最小的排列是(1,2,3,4,...,n),最大的排列是(n,n-1,n-2,...,1) 7.2.
阅读全文
摘要:第七章主要讲述暴力求解法 许多问题都可以暴力解决--不用动太多脑筋,把所有可能性都列举出来,然后一一试验,尽管这样的方法看起来显得很“笨”,但却常常是行之有效的 在枚举复杂对象之前,先尝试着枚举一些相对简单的内容,如整数,子串等,尽管暴力枚举不用太动脑筋,但对问题进行一定的分析往往会让算法更加简洁,
阅读全文