
算法
文章平均质量分 77
okouk
记录一些流水账
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
CSES - 1140 Projects 线性DP之区间调度
先假设我们的DP[i]和方法一致,我们可以通过二分当前区间的左端点,快速找到能插入的区间,如下图所示,L区间的线段都是可以插入的,假设最右边能插入的区间为。因为我们不能保证能够从5的左侧所有进行转移,而区间调度,如果按左侧排序的好处是。设DP[i]为,最后一个放置i,并且[1~i]的区间数最大值。我们的还是需要枚举所有的左侧区间,来进行状态的转移。对前端点排序,对于每个区间,找到上一个能放的区间。这些区间的最大值,我们上面的方程就可以变成。如果我们的DP[i] 维护的是。该方法2的技巧能否在经典问题。原创 2025-04-11 01:51:26 · 709 阅读 · 0 评论 -
[差值排序]B装进肚子
对于每个元素,赋予其优先级,优先级越高排最前面。优先级的定义为,早上吃的比晚上吃,对整体收益更大。只需要对每个元素之间做差俩俩排序即可。原创 2022-12-29 22:56:18 · 127 阅读 · 0 评论 -
线段树开4n空间的 三句话简单的证明
线段树存储N个节点(1)假设线段树要存储的节点个数是N=2kN = 2^kN=2k 如N=4N=4N=4,那么一定是满二叉树。又因为线段树的性质其叶子节点数一定是n个。那么此时的满二叉树总节点个数为N+N/2+N/4...+1=2N−1N + N/2 + N/4 ... +1 = 2N-1N+N/2+N/4...+1=2N−1(2)如果节点个数不是N=2kN=2^kN=2k 如N=5N=5N=5,数不一定是满二叉树,所以最后一层一定填不满。最坏情况下,最后一层的叶子节点在最右边。(3) 对于前面的满二原创 2022-06-13 16:39:45 · 773 阅读 · 2 评论 -
<算法笔记03>动态规划
介绍动态规划的核心将原问题视作若干个重叠子问题逐层递进,每个子问题的求解过程都构成一个”阶段"。在完成前一个阶段的以后,下个阶段根据本阶段的答案计算出新的结果。每个阶段都有利用之前阶段的答案,因此有个很好听的名字叫做状态转移。上文的介绍看烦了吧,我们举个有趣的例子:老王有三个孩子,王大,王二,王三,他们的年龄分别是a,b,c,老王去世了很久,年龄不再发生变化。在2021的一天,三个孩子说,我的父亲是我们三个年龄之和。那么在这一年,老王的年龄为 a+b+c,我们通过三个孩子的年龄之和计算得到了老王的原创 2021-09-12 16:31:58 · 539 阅读 · 1 评论 -
<算法笔记02>欧拉函数
算法介绍在数论,对正整数n,欧拉函数是小于n的正整数中与n互质的数的数目ϕ(n)\phi(n)ϕ(n)的值为是小于等于n的正整数中与n互质的数的数目公式求解欧拉函数公式为假设nnn有ttt个质因子,有如下公式公式:ϕ(n)=n∗(1−1p1)∗(1−1p2)∗(1−1pt)\phi(n)=n*(1-\frac{1}{p_1})*(1-\frac{1}{p_2})*(1-\frac{1}{p_t})ϕ(n)=n∗(1−p11)∗(1−p21)∗(1−pt1)证明:根据容斥原创 2021-09-05 22:03:49 · 302 阅读 · 0 评论 -
<算法笔记01>ST表
st表需求:输入一个序列A[n]A[n]A[n],进行qqq次查询,每次查询求[l,r][l,r][l,r]区间的最大值。问题:暴力的求法是,每次都遍历一下,求最大值,显然这个非常慢。所以我们需要引入一个高效的数据结构。介绍:st表根据倍增思想实现的数据结构,主要用来求解RMQ问题,O(1)O(1)O(1)的时间复杂度求出某个区间的最大值,最小值。算法介绍预处理 首先,我们设STMax[i][j]STMax[i][j]STMax[i][j]:从iii开始的区间长度为2j原创 2021-08-05 23:50:16 · 308 阅读 · 0 评论 -
板子板子板子
排序单调二分单调栈滑动窗口数学字符串KMP数据结构树状数组线段树图论原创 2021-07-27 15:34:08 · 268 阅读 · 0 评论