摘要:前言 状态机 DP是一种特殊的动态规划方法,它将问题建模为一个状态机(有限状态自动机),然后在这个状态机上进行状态转移。 状态机三要素 状态划分(互斥状态) 转移规则(状态机图) 资源约束(次数限制) 题目 https://leetcode.cn/problems/best-time-to-buy-
阅读全文
摘要:题目 https://www.luogu.com.cn/problem/P1962 题解 矩阵快速幂是一种利用快速幂思想来计算矩阵幂次的高效算法,它能将矩阵幂运算的时间复杂度从 \(O(n^3k)\) 降低到 \(O(n^3logk)\),其中 \(n\) 是矩阵维度,\(k\) 是指数。 斐波那契
阅读全文
摘要:题目 https://www.luogu.com.cn/problem/P2197 题解 经典 Nim 游戏是数学领域的公平组合数学博弈论问题,公平组合游戏具备以下特征: 完全性(完全信息) 确定性(无随机因素) 相同性(双方操作集合相同) 有穷性(有限步骤内结束) 核心理论 必败态(P-posit
阅读全文
摘要:题目 https://codeforces.com/problemset/problem/359/D 题解 假设数组 \(a = a_1,a_2,...,a_l,...,a_i,...,a_r,...,a_n\),且 \(a_l,a_{l+1},...,a_i,...,a_r (l \leq a_i
阅读全文
摘要:前言 零点定理:如果函数 \(f(x)\) 在闭区间 \([a, b]\) 上连续,且 \(f(a) \times f(b) < 0\)(即函数在两端点值异号),则在开区间 \((a, b)\) 内至少存在一点 \(c\),使得 \(f(c) = 0\)。 零点定理是连续函数的一个重要性质,也是二分
阅读全文
摘要:题目 https://www.luogu.com.cn/problem/P3865 题解 ST表(Sparse Table,稀疏表)主要用来解决 RMQ(区间最大/最小值查询)问题。主要应用倍增思想,可以实现 \(O(nlogn)\) 预处理,\(O(1)\) 查询。 凡是符合结合律和可重复贡献的信
阅读全文
摘要:前言 二维单调队列简介 二维单调队列是一维单调队列在二维矩阵上的扩展,适用于二维滑动窗口的最值问题,可以在 \(O(m \times n)\) 的时间复杂度内求出矩阵中每个固定大小子矩阵的最值。 二维单调队列的基本思想 二维单调队列的实现通常分为两步: 行方向的一维单调队列:对每一行使用单调队列,求
阅读全文
摘要:题目 https://www.luogu.com.cn/problem/P10723 题解 这题有两种解法,可以自底向上进行求解,也可以自顶向下进行求解。 解法一:自底向上 无根树建图 异或建图又称为无根树建图,指的是一颗无根树用一维数组 \(pa[i]\) 存储节点 \(i\) 的相邻节点信息和一
阅读全文
摘要:前言 更相减损术简介 更相减损术是中国古代数学著作《九章算术》中记载的一种算法,主要用于求两个整数的最大公约数(GCD)。它比欧洲的欧几里得算法(辗转相除法)早了约300年,是中国数学史上的重要成就。 原理:两个整数的最大公约数等于其中较小的数和两数之差的最大公约数 公式:gcd(a, b) = g
阅读全文
摘要:题目 https://codeforces.com/problemset/problem/735/D 题解 弱哥德巴赫猜想:任意一个大于等于 9 的奇数,都可以表示为三个素数之和,如 11 = 3 + 3 + 5。该猜想已在 2013 年由数学家哈罗德·贺欧夫各特发表两篇论文彻底证明。 强哥德巴赫猜
阅读全文
摘要:题目 https://codeforces.com/problemset/problem/2125/C 题解 此题是容斥原理的典题,先简要介绍容斥原理: 容斥原理的核心思想是:“先全部加起来,再减去多算的,再加回多减的,如此反复,直到得到精确结果”。它用于计算多个集合的并集大小,尤其是在这些集合有重
阅读全文
摘要:题目 https://leetcode.cn/problems/increment-submatrices-by-one/description/ 题解 这是一道二维差分的典题,但是为了实现二维差分,我们首先需要掌握前置知识二维前缀和。接下来我先向大家介绍二维前缀和的意义、定义和用法: 二维前缀和的
阅读全文
摘要:前言 调和级数 调和级数指的是所有正整数的倒数之和。其标准形式是:$$H_n=1+\frac{1}{2}+\frac{1}{3}+...+\frac{1}{n}=\sum_{i=1}^{n}{\frac{1}{i}}$$ 当 \(n\) 趋向于无穷大时,称之为无穷调和级数:$$\sum_{i=1}^
阅读全文
摘要:题目 https://leetcode.cn/problems/maximize-the-minimum-powered-city/description/ 题解 以stations = [1,2,4,5,0], r = 1, k = 2为测试用例进行讲解,从第 1 座城市到第 5 座城市对各个城市
阅读全文
摘要:题目 https://leetcode.cn/problems/find-x-sum-of-all-k-long-subarrays-ii/description/ 题解 定义两个有序集合 \(L, R\) 动态维护数组前 \(x\) 大元素。以滑动窗口的方式遍历数组,窗口大小为 \(n - k +
阅读全文
摘要:题目 https://codeforces.com/problemset/problem/1288/E 题解 用以下测试用例进行讲解: 4 2 3 2 上述测试用例的执行过程如图所示: 初始状态下,第 \(i\) 个人位于第 \(i\) 层,想维护的目标是每个人到达过的最高层 \(mx[i]\) 和
阅读全文
摘要:前言 简介 莫队算法是一种用于高效处理离线区间查询问题的算法,由莫涛在2009年提出。它通过对查询进行特殊排序来优化时间复杂度。莫队算法的核心思想是:利用前一个查询结果,通过左右指针快速移动来计算出下一个查询的结果。 想要学习莫队,可以参考罗勇军(b站账号:三金蝈蝈)的视频讲解:https://ww
阅读全文
摘要:题目 https://leetcode.cn/problems/maximum-amount-of-money-robot-can-earn/description/ 题解 机器人只能向右或向下移动,换言之就是一个机器人只能从上边一个位置或左边一个位置移动而来,并且在移动途中至多只能感化两个强盗(即
阅读全文
摘要:题目 https://codeforces.com/problemset/problem/2104/E 题解 将该问题分解为两个子问题: 如何快速(从左到右)找到最短子串,满足该子串可以匹配出子序列? 如何在匹配完子序列后的子串,计算出不存在的最短子序列长度? 对于子问题 1,可以考虑将 \(26\
阅读全文
摘要:题目 https://www.acwing.com/problem/content/description/4521/ 题解 对于该题,必须购买到能覆盖整个 \(days\) 数组的票。不妨假设 \(days = [x, y, z]\),很明显无论哪一种方案,从第 \(x\) 天开始购票都会是比较好
阅读全文