![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法模板
文章平均质量分 92
zhezhidashi
兄弟会背叛你,女人会离开你,金钱会诱惑你,生活会刁难你,只有数学不会,不会就是不会,怎么学都不会
展开
-
算法模板(5):数学(1):数学知识(2)combination
排列组合是组合数学中的基础。排列就是指从给定个数的元素中取出指定个数的元素进行排序;组合则是指从给定个数的元素中仅仅取出指定个数的元素,不考虑排序。排列组合的中心问题是研究给定要求的排列和组合可能出现的情况总数。排列组合与古典概率论关系密切。在高中初等数学中,排列组合多是利用列表、枚举等方法解题。加法 & 乘法原理加法原理完成一个工程可以有 nnn 类办法, ai(1≤i≤n)a_i(1 \le i \le n)ai(1≤i≤n) 代表第 iii 类方法的数目。那么完成这件事共有 S=a原创 2023-06-11 15:23:16 · 1080 阅读 · 0 评论 -
算法模板(3):搜索(6):做题积累
算法模板(3):搜索(6):做题积累一、DFS1. 1113. 红与黑有一间长方形的房子,地上铺了红色、黑色两种颜色的正方形瓷砖。你站在其中一块黑色的瓷砖上,只能向相邻(上下左右四个方向)的黑色瓷砖移动。请写一个程序,计算你总共能够到达多少块黑色的瓷砖。#include<iostream>#include<algorithm>#include<cstring>using namespace std;const int maxn = 25;char mz[原创 2023-06-11 15:11:02 · 1120 阅读 · 0 评论 -
算法模板(8):网络流(3):费用流
费用流:所有最大可行流中,费用的最小值/最大值注意费用指的是这条边的单位费用,即为 边的流量 乘 边的费用.nmSTEKbfs。原创 2023-06-14 13:33:54 · 507 阅读 · 0 评论 -
算法模板(8):网络流(2):最小割
fSTu∈Sv∈T∑fuv−v∈Su∈T∑fvuCSTu∈Sv∈T∑cuv题意:给定一个包含n个点m条边的有向图,并给定每条边的容量,边的容量非负。图中可能存在重边和自环。求从点S到点T的最小割。这个求的是最小割的大小,直接用Dinic求就可以了,代码略。原创 2023-06-12 09:41:21 · 467 阅读 · 0 评论 -
算法模板(8):网络流(1):最大流
基本概念0≤fuv≤Cuvc′uvcuv−fuvc′uvfvuv→u∣f′∣0∣f′∣STcstu∈S∑v∈T∑cuvfstu∈S∑v∈T∑fuv−u∈T∑v∈S∑fuvfST<=cSTXYfXYu∈X∑v∈Y∑fuv−u∈X∑v∈Y∑fvufX。原创 2023-06-12 09:41:14 · 706 阅读 · 0 评论 -
算法模板(7):计算几何(1)
有向面积:两个向量做叉积,得到的向量指向纸外是正值,指向纸内是负值。点 A(x,y)A(x, y)A(x,y) 绕 OOO 顺时针旋转 θ\thetaθ :(x,y)∗(cosθ−sinθsinθconθ)(x, y) * \begin{pmatrix}cos\theta & -sin\theta\\sin\theta & con\theta\end{pmatrix}(x,y)∗(cosθsinθ−sinθconθ)2984. 线段在二维平面内有 n 条线段,请你编写一个程序,判断是否存在一原创 2023-06-12 09:42:38 · 594 阅读 · 0 评论 -
算法模板(7):计算几何(2)
已知平面上不共线的一组点的坐标,求覆盖这组点的面积最小的矩形。输出矩形的面积和四个顶点的坐标。上面那个证明出来,矩形至少有一条边和凸包的一条边重合。那么,我们其实就是枚举凸包的每一条边,然后找到离这条边最远的边,即投影最大的。然后,找两边的点时,就是找投影最小的。这样矩形的三个点就找到了,最后一个点可以根据矩形的边的关系算出来。原创 2023-06-12 09:42:45 · 743 阅读 · 0 评论 -
算法模板(6):贪心
给定N个闭区间,请你在数轴上选择尽量少的点,使得每个区间内至少包含一个选出的点。输出选择的点的最小数量。原创 2023-06-12 09:42:25 · 668 阅读 · 0 评论 -
算法模板(5):数学(5):博弈
现在有两位玩家轮流操作,每次操作可以从任意一堆石子中拿取石子,每次拿取的石子数量必须包含于集合S,最后无法进行操作的人视为失败。题意:游戏开始时,有 N 堆石子排成一排,然后他们轮流操作(Alice 先手),每次操作时从下面的规则中任选一个:(1)从某堆石子中取走一个;已经拿到地面上的石子不能再拿,最后无法进行操作的人视为失败。NIM博弈属于公平组合游戏,但城建的棋类游戏,比如围棋,就不是公平组合游戏。题意:现在,有一个n级台阶的楼梯,每级台阶上都有若干个石子,其中第。则称该游戏为一个公平组合游戏。原创 2023-06-12 09:40:31 · 374 阅读 · 0 评论 -
算法模板(5):数学(4):其他数学
线性代数高斯消元 (O(n3))(O(n^3))(O(n3))883. 高斯消元解线性方程组步骤:枚举每一列:找到绝对值最大的一行,将改行换到最上面,将该行第一个数变成1,将下面所有行的第c列变成0.#include<cstdio>#include<cmath>#include<algorithm>using namespace std;const int maxn = 110;const double EPS = 1e-6;int N;doub原创 2023-06-12 09:42:00 · 617 阅读 · 0 评论 -
算法模板(5):数学(3):多项式2
生成函数即母函数,就是离散数学课讲的,给一个无穷序列。 位字符串的个数,其中 A 和 C 必须出现偶数次。用两个1,两个3,一个5,能排成多少个不同的四位数?个物品的组合数用隔板法或不定方程解的个数 (的系数,其实就是上述问题的答案,即。,把“偶数”改成“奇数”的话答案为。个物品,每个物品无限多个,那么选。八个多项式相乘,最后得到的多项式是。,这样可以保证多项式是收敛的。对应的可以选任意多个,式子。 对应只能选偶数个,式子。,求一次差分相当于乘。表示,于是得出生成函数为。原创 2023-06-12 09:41:45 · 563 阅读 · 0 评论 -
算法模板(5):数学(3):多项式1
多项式多项式相关知识多项式简介多项式的度:对于一个多项式 f(x)f(x)f(x),称其最高次项的次数为该多项式的 度(Degree),记作 degf\deg fdegf.多项式的逆元:对于多项式 f(x)f(x)f(x),若存在 g(x)g(x)g(x) 满足:f(x)g(x)≡1(modxn)f(x)g(x) \equiv 1 \pmod {x^n}f(x)g(x)≡1(modxn)则称 g(x)g(x)g(x) 为 f(x)f(x)f(x) 在模 xnx^nxn 意义下的逆元原创 2023-06-12 09:41:30 · 575 阅读 · 0 评论 -
算法模板(5):数学(2):数论
易错:忘记在主程序调用筛法函数,并查集忘记调用初始化函数!分解质因数时,如果先筛素数再分解质因数,别忘把divisor函数中的好几个i全改成prime[i],否则错的很惨。数论质数(1)质数的判定素数计数函数:小于或等于 xxx 的素数个数,用 π(x)\pi(x)π(x) 表示。随着 xxx 的增大,有这样近似的结果:π(x)∼xlnx\pi(x) \sim \frac{x}{\ln x}π(x)∼lnxx暴力判素数这个方法好,不用开根号,也不用担心溢出了。复杂度仍是O(n)O原创 2023-06-12 09:39:17 · 957 阅读 · 0 评论 -
算法模板(5):数学(1):数学知识(1)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SemLiPww-1686468029027)(null)]∑i=1ni3=13+23+...+n3=n2(n+1)24=[n(n+1)2]2\sum\limits_{i = 1}^{n} i^3= 1^3 + 2 ^ 3 + ... + n^3 = \frac{n^2(n+1)^2}{4}=[\frac{n(n+1)}{2}]^2i=1∑ni3=13+23+...+n3=4n2(n+1)2=[2n(n+1)]2其他在原创 2023-06-11 15:20:57 · 1046 阅读 · 0 评论 -
算法模板(4):动态规划(4) 做题积累(2)
John 打算驾驶一辆汽车周游一个环形公路。公路上总共有 n 个车站,每站都有若干升汽油(有的站可能油量为零),每升油可以让汽车行驶一千米。John 必须从某个车站出发,一直按顺时针(或逆时针)方向走遍所有的车站,并回到起点。在一开始的时候,汽车内油量为零,John 每到一个车站就把该站所有的油都带上(起点站亦是如此),行驶过程中不能出现没有油的情况。任务:判断以每个车站为起点能否按条件成功周游一周。原创 2023-06-11 15:20:17 · 1291 阅读 · 0 评论 -
算法模板(4):动态规划(3) 做题积累(1)
动态规划1. 背包1. 1024. 装箱问题题意:有一个箱子容量为 V,同时有 n 个物品,每个物品有一个体积(正整数)。要求 n 个物品中,任取若干个装入箱内,使箱子的剩余空间为最小。别学那么死板。换种说法,每个物品体积是v,价值是v,此时的f[V]表示的就是体积不超过V的情况下,体积的最大值。然后答案就是V−f[V]V - f[V]V−f[V]#include<cstdio>#include<algorithm>using namespace std;cons原创 2023-06-11 15:18:43 · 695 阅读 · 0 评论 -
算法模板(4):动态规划(2)
8.树形DP没有上司的舞会树上最大独立集问题Ural 大学有 NNN 名职员,编号为 1∼N1 \sim N1∼N。他们的关系就像一棵以校长为根的树,父节点就是子节点的直接上司。每个职员有一个快乐指数,用整数 HiH_iHi 给出,其中 1≤i≤N1 \le i \le N1≤i≤N。现在要召开一场周年庆宴会,不过,没有职员愿意和直接上司一起参会。在满足这个条件的前提下,主办方希望邀请一部分职员参会,使得所有参会职员的快乐指数总和最大,求这个最大值。#include<cstdio>#原创 2023-06-11 15:16:57 · 1440 阅读 · 0 评论 -
算法模板(4):动态规划(1)
动态规划闫氏 dpdpdp 分析法:集合:怎么划分。通常以集合的划分来定义数组。f(i,j)f(i, j)f(i,j):选前 iii 个物品.体积不超过 jjj。全部初始化为 000;jjj 非负时状态才合法。体积恰好是 jjj。f(0,0)f(0, 0)f(0,0)初始化为 000,其他的初始化为负无穷。jjj 非负时状态才合法。体积不小于 jjj。f(0,0)f(0, 0)f(0,0)初始化为 000,其他状态初始化为正无穷。jjj 小于 000 时状态依然合法。属性:通常只有原创 2023-06-11 15:14:39 · 499 阅读 · 0 评论 -
算法模板(3):搜索(5):其他
xiyi已知NA1A2……An。今要将它们分成M组,使得各组数据的数值和最平均,即各组的均方差最小,其实就是每组均值的方差。原创 2023-06-11 15:09:54 · 1063 阅读 · 0 评论 -
算法模板(3):搜索(4):高等图论
SSuvuvSSSDAGdfn[x]:结点 x 第一次被访问的时间戳 (dfs number);low[x]:结点 x 所能访问到的点的 dfn 值的最小值. 这里的树指的是 DFS 树. 所有结点按 dfn 排序即可得 dfs 序列一个结点的子树内结点的 dfn 都大于该结点的 dfn。从根开始的一条路径上的 dfn 严格递增。一棵 DFS 树被构造出来后,考虑图中的非树边。前向边 (forward edge):祖先→儿子。后向边 (backward edge):儿子→祖先。原创 2023-06-11 15:07:37 · 1769 阅读 · 0 评论 -
算法模板(3):搜索(3):图论提高
On2。原创 2023-06-11 15:05:58 · 1736 阅读 · 0 评论 -
算法模板(3):搜索(2):bfs与图论基础
在搜索题中,一般来讲,bfs和dfs都有一个最优选择。920. 最优乘车题意:每条单程巴士线路从某个巴士站出发,依次途经若干个巴士站,最终到达终点巴士站。一名旅客最近到 HHH 城旅游,他很想去 SSS 公园游玩,但如果从他所在的饭店没有一路巴士可以直接到达 SSS 公园,则他可能要先乘某一路巴士坐几站,再下来换乘同一站台的另一路巴士,这样换乘几次后到达 SSS 公园。现在用整数 1,2,…N1,2,…N1,2,…N 给 HHH 城的所有的巴士站编号,约定这名旅客所在饭店的巴士站编号为 111,SS原创 2023-04-16 16:02:16 · 283 阅读 · 0 评论 -
算法模板(3):搜索(1):dfs
深搜其实用的就是栈,虽然不是手写的栈,但是递归函数就是在调用系统的栈。原创 2023-04-16 15:57:43 · 204 阅读 · 0 评论 -
算法模板(2):数据结构(5)做题积累
并查集原创 2023-04-13 16:24:40 · 450 阅读 · 0 评论 -
算法模板(2):数据结构(4) 复杂数据结构2
首先要区分一个概念:子序列在原序列中可以不连续,子串在原串中必须连续SAM是个状态机。一个起点,若干终点。原串的所有子串和从SAM起点开始的所有路径一一对应,不重不漏。所以终点就是包含后缀的点。每个点包含若干子串,每个子串都一一对应一条从起点到该点的路径。且这些子串一定是里面最长子串的连续后缀。SAM问题中经常考虑两种边:普通边,类似于Trie。表示在某个状态所表示原创 2023-04-13 16:18:00 · 328 阅读 · 0 评论 -
算法模板(2):数据结构(3) 复杂数据结构1
Splay 是一种二叉查找树,它通过不断将某个节点旋转到根节点,使得整棵树仍然满足二叉查找树的性质,并且保持平衡而不至于退化为链.为了使 Splay 保持平衡而进行旋转操作,旋转的本质是将某个节点上移一个位置。旋转需要保证在 Splay 中旋转分为两种:左旋和右旋。具体分析旋转步骤 (假设需要旋转的节点为 xxx,其父亲为 yyy,以右旋为例)Splay 规定:每访问一个节点后都要强制将其旋转到根节点。此时旋转操作具体分为 666 种情况讨论(其中 xxx 为需要旋转到根的节点)2. 树套树2488.原创 2023-04-13 16:16:54 · 431 阅读 · 0 评论 -
算法模板(2):数据结构(2)
主席树思想是每个位置都维护一个线段树,线段树的节点是值的范围,然后第 i 个线段树中某个区间[x, y]维护的是,1~i 中数字在[x, y]范围内的个数。这里利用到了前缀和的思想。第一类指令形如“C l r d”,表示把数列中第l~r个数都加d。第二类指令形如“Q X”,表示询问数列中第x个数的值。给定长度为N的数列A,然后输入M行操作指令。对于每个询问,输出一个整数表示答案。程序运行的最开始,整数序列为空。这道题是用树状数组去维护差分。原创 2023-03-25 09:33:34 · 363 阅读 · 0 评论 -
算法模板(2):数据结构(1)
由于new操作非常慢,因此多数情况下用结构加指针的情况会超时。而且在多数笔试题中用数组实现链表极为常见。e按照输入顺序依次存放数据,假如e中有一个元素下标为k,则ne[k]存的是下一个元素在e中的下标。head指向头结点,其值就是头结点的下标。idx表示当前用到了哪个节点,其实作用只有一个,就是往e里面存数字,就跟着 vector 中的 push_back() 一样。如果在e中下标为k的数指向尾结点,ne[k] = -1.原创 2023-03-25 09:31:01 · 356 阅读 · 0 评论 -
算法模板(1):基础算法(3)做题积累
思路很简单,就是二分出答案。对于第2个小朋友,A2-X2+X3=ave -> X3=ave-A2+X2=2ave-A1-A2+X1=X1-C2 即 C2=A1+A2-2ave=A2+C1-ave 以此类推。对于第1个小朋友,A1-X1+X2=ave -> X2=ave-A1+X1 = X1-C1 (假设C1=A1-ave,下面类似)对于第3个小朋友,A3-X3+X4=ave -> X4=ave-A3+X3=3ave-A1-A2-A3+X1=X1-C3。我们的Ci的通式为 Ci=Ai+C[i-1]-ave!原创 2023-03-25 09:25:05 · 419 阅读 · 0 评论 -
算法模板(1):基础算法(2)
题意:他将布丁摆成一行,接着说:“我可以把某种颜色的布丁全部变成另一种颜色,我还会在某些时刻问你当前一共有多少段颜色。例如:颜色分别为 1,2,2,1 的四个布丁一共有 3 段颜色。当把 x 变为 y 时,只有 x 和 y 相邻的地方,才会使段数减少1.每次合并集合的时候采用按秩合并的方式,把 size 小的集合合并到 size 大的集合中,如果sz1sz2,就把对应的两种颜色的指针互换(比如之前1→12→2,现在1→22→1).原创 2023-03-25 09:23:52 · 239 阅读 · 0 评论 -
算法模板(1):基础算法(1)
因此有这么一个性质:只要第一行的开关确定了,那么后面所有开关的状态都必然可以推出来。在被锁死的一行中,只有正下方的那个开关可以改变这个数字的状态。的方形,每一个灯都有一个开关,游戏者可以改变它的状态。每一步,游戏者可以改变某一个灯的状态。游戏者改变一个灯的状态会产生连锁反应:和这个灯上下左右相邻的灯也要相应地改变其状态。zhezhidashi: 其实上面的两个分类都是可以套用这个模板的,其实这个模板思路还挺清晰。(2)构造方法:b[1] = a[1], b[2] = a[2] - a[1], …原创 2023-03-25 09:20:27 · 300 阅读 · 0 评论