Loading

摘要: 前置知识 自然对数、分数次幂、概率。 前言 模拟退火可以在我们想不到题目正解的时候试一试 其实就是骗分方法。 因为纯随机得出正确答案的概率非常低,所以我们就可以加一定的优化,使找到答案概率增大。 算法思想 温度(步长):每次选择一个范围进行搜索,在搜索过程中范围不断缩小,最后到很小的时候就可以确定答 阅读全文
posted @ 2024-07-22 09:16 SunnyYuan 阅读(5) 评论(0) 推荐(0) 编辑
摘要: IDDFS 使用场景 使用 dfs 由于状态量太大会 TLE, bfs 会 MLE。 答案必须很小,一般在 20 以内。 算法原理 设置 dfs 的搜索深度限制 \(dep\),dfs 穷举 \(dep\) 层的答案。 若在 \(dep\) 层找到满足条件的情形,则 \(dep\) 则为答案,否则 阅读全文
posted @ 2024-07-22 09:16 SunnyYuan 阅读(8) 评论(0) 推荐(0) 编辑
摘要: 记忆化搜索 思想 是实现 DP 的一种手段。 优点: 不关心递推顺序; 对于两维及以上的 DP,方便处理初始状态和无效状态。 缺点: 无法使用滚动数组。 注意事项: 要什么状态搜什么状态; 所有的状态转移都要采取直接搜索的数据很傻。 越界的状态不能赋值。 实现步骤: 先判断是否越界,如果越界则返回对 阅读全文
posted @ 2024-07-22 09:16 SunnyYuan 阅读(2) 评论(0) 推荐(0) 编辑
摘要: 扩展欧几里得算法 思想 首先回忆一下裴蜀定理:对于任意一对不全为 \(0\) 的整数 \(a, b\),存在 \(x, y\) 使得 \(ax + by = \gcd(a, b)\)。 扩展欧几里得算法就是求出一组解满足 \(ax + by = \gcd(a, b)\),这里用到了欧几里得算法,不会 阅读全文
posted @ 2024-07-22 09:16 SunnyYuan 阅读(2) 评论(0) 推荐(0) 编辑
摘要: 欧拉定理 思想 若 \(a\) 与 \(n\) 互质,则 \(a^{\varphi(n)} \equiv 1\pmod n\); 容易得出当 \(n\) 为质数时, \(a^{n - 1}\equiv 1 \pmod n\)。 证明 假设与 \(1\sim n\) 中与 \(n\) 互质的数字为 \ 阅读全文
posted @ 2024-07-22 09:16 SunnyYuan 阅读(13) 评论(0) 推荐(0) 编辑
摘要: 欧拉函数 思想 \(\varphi(n)\) 表示的是 \(1\sim n\) 中与 \(n\) 互质的个数。 怎么求 \(\varphi(n)\) 呢? 先将 \(n\) 质因数分解:\(n = p_1^{a_1}p_2^{a_2}\cdots p_k^{a_k}\),那么 \(\varphi(n 阅读全文
posted @ 2024-07-22 09:16 SunnyYuan 阅读(5) 评论(0) 推荐(0) 编辑
摘要: 欧几里得算法 思想 \[\gcd(a, b) = \gcd(b, a \bmod b) \]证明 \(\gcd(a, b) = \gcd(b, a \bmod b)\): 首先,如果有 \(d | a\),\(d | b\),那么 \(d | ax + by\)。 然后,\(a \bmod b = 阅读全文
posted @ 2024-07-22 09:15 SunnyYuan 阅读(1) 评论(0) 推荐(0) 编辑
摘要: 学了 IDA*, 然后学学 A*。 A* A* 可以简单理解为在 bfs 的时候分个先后,哪个最有可能先到达就先走哪一步。 A* 是在某个最短路问题中(比如求最小的步骤等),如果所有边权都是非负的,那么就可以使用启发函数来优化 bfs 过程。 例题 P1379 八数码难题 思路 我们在 bfs 的过 阅读全文
posted @ 2024-07-22 09:15 SunnyYuan 阅读(2) 评论(0) 推荐(0) 编辑
摘要: 莫队 使用场景 离线算法; 区间询问不断修改。 能用 \(O(1)\) 的时间复杂度从 \([l, r]\) 到 \([l + 1, r]\) 或者 \([l, r - 1]\)。 原理 原问题可以转化为为建立一个坐标轴,对于一个询问 \((l, r)\),相当于点 \((l, r)\),从一个询问 阅读全文
posted @ 2024-07-22 09:15 SunnyYuan 阅读(1) 评论(0) 推荐(0) 编辑
摘要: 差分约束系统 差分约束系统是将不等式组的问题转化为图论问题。 前置知识 判断负环 例题 P5960 【模板】差分约束算法 思路 我们将 \(x_u - x_v \le y_u\) 换为 \(x_u \le x_v + y_u\)。 然后我们建立一条连接 \(v, u\)(注意是 \(v, u\) 不 阅读全文
posted @ 2024-07-22 09:15 SunnyYuan 阅读(7) 评论(0) 推荐(0) 编辑
摘要: 最短路 Dijkstra 算法 思路 Dijkstra 算法,采用贪心思想,在某一时刻如果 \(dis\) 数组中 \(dis_u\) 最小,那么就固定 \(u\),\(dis_u\) 一定是 \(1\rightarrow u\) 的最短路径,然后我们再通过 \(u\) 更新与 \(u\) 有边相连 阅读全文
posted @ 2024-07-22 09:15 SunnyYuan 阅读(10) 评论(0) 推荐(0) 编辑
摘要: 使用 SPFA 算法判断负环 前言 判断负环是属于判定性的问题,常与二分结合起来。 例题 AcWing 852. spfa判断负环 思路 可以使用 SPFA 进行判断。 因为两点之间至多有 \(n - 1\) 条边,所以当一个点的最短路径经过的边数大于等于 \(n\) 时,说明有负环。 代码 #in 阅读全文
posted @ 2024-07-22 09:15 SunnyYuan 阅读(13) 评论(0) 推荐(0) 编辑
摘要: P7771 【模板】欧拉路径 欧拉路径的模板题。 思路 首先判断是否有欧拉路径,然后排序,找出起点,最后 dfs 找路径。 代码 细节多,比如要判断一个点是否存在(这个题目不需要)。 #include <bits/stdc++.h> using namespace std; const int N 阅读全文
posted @ 2024-07-22 09:07 SunnyYuan 阅读(3) 评论(0) 推荐(0) 编辑
摘要: 文章有点长,都是由本人一点一点写出来的,公式加载需要一段时间。 CF1152E Neko and Flashback 思路来自 @apple365。 思路 任意一组 \(b_i, c_i\) 都是相邻的两条边,所以我们将 \(b_i\) 和 \(c_i\) 连起来,如果可以跑通一条欧拉路径,那么这条 阅读全文
posted @ 2024-07-22 08:28 SunnyYuan 阅读(10) 评论(0) 推荐(0) 编辑
摘要: 文章有点长,都是由本人一点一点写出来的,公式加载需要一段时间。 CF149D Coloring Brackets 思路 这是一道很好的区间 DP 题目。 我们可以设 \(f_{l, r, c1, c2}\) 表示在 \([l, r]\) 这一段头端染色 \(c1\),尾部染色 \(c2\) 可以获得 阅读全文
posted @ 2024-07-22 08:09 SunnyYuan 阅读(7) 评论(0) 推荐(0) 编辑