摘要: 先盗一张图: 正常的汉诺塔问题只要把A柱的所有盘子移动到C柱就好了,可以借助B柱。实现的逻辑如下: 我们在做这一类问题的时候如果从递归的终止条件去考虑的话,会容易很多。 我们就先看递归的终止条件 只剩一个盘子的时候,直接把A柱的盘子移动到C柱即可 否则,我们就要把A柱上的n-1个盘子从A柱借助于C柱 阅读全文
posted @ 2018-07-07 19:10 静听风吟。 阅读(290) 评论(0) 推荐(0) 编辑
摘要: 如果题目真的要考察宽度优先搜索,那么这类题目往往具有比较大的编码难度,换个说法,就是细枝末节特别多,状态特别复杂。。 剥茧抽丝,这里以一个比较“裸”的BFS作为例子,了解一下实现BFS的一些规范。 直接把题目拿过来: 这道题如果看成了DP的话很容易写记忆化,但是,但是会爆栈。如果不信,你可以写一个递 阅读全文
posted @ 2018-07-07 18:53 静听风吟。 阅读(134) 评论(0) 推荐(0) 编辑
摘要: N皇后问题是DFS的代表性问题,其最难的地方就是在判重这里,想明白了怎么判重的话问题就很显然了。 这里给出两份代码,其中第一份代码的效率更好,就是在判重上下了功夫。当然,我记得还有使用位运算进行判重的方法,这里就先不介绍了。 首先是第一份代码,二维数组直接进行判重。 第二份代码的判重思路还是很容易看 阅读全文
posted @ 2018-07-07 18:43 静听风吟。 阅读(130) 评论(0) 推荐(0) 编辑
摘要: 选择尽量少的区间覆盖一条指定的线段[S,T] 在开始的时候把所有区间[S,T]之外的部分切掉 然后将区间按照左端点从小到大排序,如果第一个区间的起点不是S则无解 之后的实现逻辑建议采用本文介绍的这样,否则可能会因为性能差异而T掉 我们记录一个当前延伸的最右位置,初值为S 接下来按顺序考虑每个区间,将 阅读全文
posted @ 2018-07-06 12:24 静听风吟。 阅读(223) 评论(0) 推荐(0) 编辑
摘要: 为啥把这两个问题放在一起?因为这两个问题可以用同样的程序来实现!! 请注意刘汝佳算法竞赛入门经典在进行区间选点问题的讨论时,有一句话没有任何意义:b相同时a从大到小排序 因为排不排结果没有任何区别 程序实现的思路是把所有的边按照右端点从小到大排序 设置一个tmp初值为极小值,然后考虑每一条边,每次都 阅读全文
posted @ 2018-07-06 12:17 静听风吟。 阅读(1211) 评论(0) 推荐(0) 编辑
摘要: 这个问题比部分背包问题还简单,先拿轻的再拿重的可以保证最后物品装的最多。代码如下: 阅读全文
posted @ 2018-07-06 12:11 静听风吟。 阅读(251) 评论(0) 推荐(0) 编辑
摘要: 每个物品都可以拿走一部分,要在不超重的情况下总价值最高,这应该是最简单的一类贪心问题了,思路很明显,考虑性价比即可,安装性价比排序,从高到低开始拿,除了最后一个物品之外,要么不拿,要么拿走全部,具体实现如下。请注意结果的细节,对最后一个物品的处理。 阅读全文
posted @ 2018-07-06 12:09 静听风吟。 阅读(195) 评论(0) 推荐(0) 编辑
摘要: 该算法由Bellman-Ford算法演变过来,首先介绍一下Bellman-Ford算法 最短路最多经过n-1个点,可以用n-1轮松弛操作来得到 当然这个算法我没有实际应用过,而是一直在用它的优化算法,利用队列代替前面的循环检查 SPFA最坏时间复杂度仍然为O(nm),但是有人分析其时间复杂度为O(k 阅读全文
posted @ 2018-07-06 12:05 静听风吟。 阅读(158) 评论(0) 推荐(0) 编辑
摘要: Kruskal算法核心是加边,先把所有边按照权值从小到大排序,然后在剩下的所有没有被选过的边中,找到最小的边,如果和已经选取的边构成回路则放弃,选取次小边,直到选取了n-1条边为止,这样所有点就都连通了。 每次从边集中选取的权值最小的边的两个顶点如果属于不同的树,就把他们合并(把这条边加入子图),反 阅读全文
posted @ 2018-07-06 11:54 静听风吟。 阅读(296) 评论(0) 推荐(0) 编辑
摘要: 本文介绍三种方法进行文件输入输出,都非常实用 第一种方法是采用重定向的形式进行输入输出,很方便 记得包含头文件#include<cstdio> 第二种方法是使用C语言的形式进行输入输出 第三种方法是C++推荐的形式,以流的形式输入输出 OI选手推荐使用第一种方式 阅读全文
posted @ 2018-07-05 23:21 静听风吟。 阅读(317) 评论(0) 推荐(0) 编辑