摘要:
概述 算法作用: 在O(n)的复杂度 求出多个匹配串 出现在 模式串的 哪些地方 出现次数。 算法核心: 自动机的和kmp 类似,关键是next指针 构建next指针 next指针:状态 u 的 next 指针指向另一个状态 v, 当且仅当 v 是 u 的最长后缀。 即: next 指针是指向所有模 阅读全文
摘要:
概述 作用: 求图中只有两种权值边的最短路。 理解: 如果我们的图中只有两种边0或者1(1也可以是任意的正数)。 每次从队头取出元素,我们就可以使用一个双端队列来模拟dij中的优先队列: 如果扩展到的边权值为0,就放入队头。 如果扩展到的边权值为1,就放入队尾。 很显然这样是满足优先队列的。因此算法 阅读全文
摘要:
前缀和 一维前缀和: 预处理: $O(n)$ $S[i] = a[1] + a[2] + ... a[i]$ 求区间[L,R]的和:$O(1)$ $a[ L ]+...+a[ R ] = S[r] - S[l - 1]$ 二维前缀和:. 预处理: $O(nm)$ S[i, j] = 第i行j列格子左 阅读全文
摘要:
# 整数二分 二分的本质**不是单调性。** *(有单调性一定可以二分,但是二分可以做的题,不一定需要满足单调性。)* 二分的本质**是二段性** 就是有一个分界点O,分界点左边都是状态x,分界点右边都是状态y。 ![image](https://img2022.cnblogs.com/blog/2 阅读全文
摘要:
题目链接 题意 n个陪审团的候选人,从这n个人中选m人组成陪审团。 选出的m个人,必须满足辩方总分和控方总分的差的绝对值最小。如果有多种选择方案的辩方总分和控方总分的之差的绝对值相同,那么选辩控双方总分之和最大的方案即可。 思路 DP过程 dp状态: 用三维DP dp[i][j][k]表示第i个人已 阅读全文
摘要:
松弛: 考虑节点u以及它的后继节点v。从起点跑到v有好多跑法,有的跑法经过u,有的不经过。 经过u的跑法的距离就是$dist[u]+w_{u->v}$。 松弛操作就是比较$dist[v]$和$dist[u]+w_{u->v}$哪个大。 如果前者大一点,就说明当前的不是最短路,就要赋值为后者,这就叫做 阅读全文
摘要:
约定: n是指点的数量,m是指边的数量 目录: Dijkstra算法 Dijkstra算法只能用于所有边权均为非负数值的图 Dijkstra算法有两种实现: 一种是朴素实现,复杂度是 $O(n^2) $ 一种是堆优化版,复杂度是 $O(m \log n)$ 堆优化版+邻接表存图有以下优点: 不需要对 阅读全文
摘要:
树形 DP,即在树上进行的 DP。 由于树固有的递归性质,树形 DP 一般都是递归进行的。 树的最长路径 题目描述 给定一个含有 n 个节点的 树,以及树中每条边的权值 wedgei。 现需要在树中找出一条路径,使得该路径上所有边的权值之和最大。 思路: 记录以i为根节点的子树中,从子树某个节点到i 阅读全文
摘要:
群友的题意https://docs.qq.com/doc/DVXJqWHZrRGtFbWR2 K Headphones 水题 题意: 代码: #include <iostream> #include <cstring> #include <vector> #include <bits/stdc++. 阅读全文
摘要:
概述 马拉车(Manacher)是查找一个字符串的最长回文子串的线性算法。 同时还可以用于求所有回文子串数量。 算法原理与实现 计算字符串的最长回文字串的朴素算法: 枚举回文串的中点,并且分为两种情况: 一种是回文串长度是奇数的情况 另一种是回文串长度是偶数的情况 时间复杂度为$O(n^2)$. 马 阅读全文