随笔分类 - 算法竞赛
摘要:快速幂 幂运算的本质是做乘法,对于 ,其核心思想是将指数 进行二进制分解,然后对 的每一位进行进行乘法,时间复杂度为 。 ll quick_power(ll a, ll b, ll p) { ll ans = 1 % p; for (;
阅读全文
摘要:素数 定义 一个大于 的自然数,除了 和它自身外,不能整除其他自然数的数。 性质 素数有无穷多个 存在任意长的连续数,其中所有数都是合数,即相邻素数之间的间隔任意大。 随着 的增大素数越来越稀疏。 哥德巴赫猜想 任意大于 的正偶数都可以写成两个素数的和
阅读全文
摘要:背包DP是线性DP中一种特殊的DP。 01背包 最基础的背包,有 件物品,背包容量为 ,每件物品只有一件。可以使用空间优化,一般是原地滚动,此时注意容量需要从后往前更新,否则会一个状态更新多次。时间复杂度为 。 核心代码 void solve() { int
阅读全文
摘要:状压DP(Bit mask DP)将状态压缩为二进制表示,用于处理状态复杂的问题。主要分为一维和二维两种类型。 一维状压DP 最经典的是求最短哈密顿路径,对应 个结点的带权无向图,暴力枚举所有情况的时间复杂度为 ,但是我们思考一下,到达某个顶点时,需要记录在这之前已经走过
阅读全文
摘要:“三步走”方法 动态规划问题种类较多,但大多都能通过“三步走”方法解决。 1.状态表示:将具体问题抽象为数学问题,dp数组通常表示一个函数,分别分析其自变量和因变量的含义。 因变量:即dp数组的值表示的含义,大多数情况是题目是问什么就设什么,少部分情况是需要将问题表示转化一下。 自变量:即dp数组的
阅读全文