随笔分类 - 算法
在ACM打酱油的日常
摘要:S(k)=A^1+A^2...+A^k. 保利求解就超时了,我们考虑一下当k为偶数的情况,A^1+A^2+A^3+A^4...+A^k,取其中前一半A^1+A^2...A^k/2,后一半提取公共矩阵A^k/2后可以发现也是前一半A^1+A^2...A^k/2。因此我们可以考虑只算其中一半,然后A^k
阅读全文
摘要:const LL N = 100005; LL num[N]; LL dp[N]; LL go(LL l, LL r, LL k) { for (; r >= l; r--) if (dp[r] = 0) { if (r - l > 1; if (dp[mid] > k) r = mid; e...
阅读全文
摘要:好久没写搜索题了,就当练手吧。 vis[][][1025]第三个维度用来维护不同key持有状态的访问情况。 对于只有钥匙没有对应门的位置,置为'.',避免不必要的状态分支。
阅读全文
摘要:基数排序属于“分配式排序”(distributionsort),基数排序法又称“桶子法”(bucketsort)或binsort,顾名思义,它是透过键值的部份资讯,将要排序的元素分配至某些“桶”中,借以达到排序的作用,基数排序法是属于稳定性的排序,其时间复杂度为O(nlog(r)m),其中r为所采取
阅读全文
摘要:逆序数的概念:对于n个不同的元素,先规定各元素之间有一个标准次序(例如n个 不同的自然数,可规定从小到大为标准次序),于是在这n个元素的任一排列中,当某两个元素的先后次序与标准次序不同时,就说有1个逆序。一个排列中所有逆序总数叫做这个排列的逆序数。 解决思路: HDU-1394 1、线段树:通过保存
阅读全文
摘要:用于处理不重合由大量节点通过两两相连形成的不重合集合的合并问题。 形成过程详解: 1.一开始所有元素都自成一个集合。 (图片来自网络) 2.根据连接关系(题目描述或者自行连接) 将a,b节点相连,即是将两个节点所在集合合并。合并方式是将集合A通过其根元素连接到集合B根元素并作为其子节点的方式并入集合
阅读全文
摘要:深度优先搜索算法(英语:Depth-First-Search,简称DFS)是一种用于遍历或搜索树或图的算法。沿着树的深度遍历树的节点,尽可能深的搜索树的分支。当节点v的所在边都己被探寻过,搜索将回溯到发现节点v的那条边的起始节点。这一过程一直进行到已发现从源节点可达的所有节点为止。如果还存在未被发现
阅读全文
摘要:广度优先搜索是对无向图以逻辑上的树的形式从根节点开始进行的逐层遍历。 当题目所求为路径某属性最小的解时适用广度优先搜索,因为如果能使逻辑上的树的层数和所求的最小的属性严格一致,逐层遍历到终点时必然为其属性最小值。 算法实现:基于(优先)队列先进先出的特性,实现优先遍历上层节点,通过标记数组保证访问过
阅读全文
摘要:题目大意:基于汉诺塔原型,第一根柱子上有n个盘子,从上至下编号从1依次递增至n。在最佳移动方案中,第m次所移动的盘子的编号。 解题思路:模拟必然是会超时的。但根据汉诺塔的递归原理,容易发现,对于n阶汉诺塔,将第一个盘从A柱移动到B柱是一步,将前两个盘从A柱移动到B柱是3步,以此类推,将n个盘从A柱移
阅读全文