算法总结
文章平均质量分 70
各类算法讲解
Fool xa
活着
展开
-
ICPC-notes
文章目录动态规划背包DP分组背包线性DP最长上升子序列(LIS)Dilworth定理各元素不重复的最长公共子序列区间DP树DP树形DP遍历有效子节点个数问题换根DP树上哈希数位DP图论树论无根树转有根树生成树LCA图论无向图有向图着色最短路DijkstraBellman-FordFloyd-Warshall最大流最小费用最大流割点双连通分量BCC强连通分量SCC2SAT数据结构线段树单调队列数论数论定理与推论欧几里得算法扩展欧几里得算法欧拉筛求逆元中国剩余定理大素数miller-rabin判断大素数大素数之转载 2022-04-19 20:07:10 · 307 阅读 · 1 评论 -
数位动态规划(dp)
待更新原创 2022-01-13 22:23:00 · 225 阅读 · 0 评论 -
树形动态规划(dp)
一、基本概念 树形动态规划,顾名思义,就是在“树”的数据结构上做动态规划,通过有限次地遍历树,记录相关信息,以求解问题。通常,动态规划都是线性的或者是建立在图上的,线性的动态规划的顺序有两种方向即向前和向后,相应的状态转移方程有两种,即顺推与逆推,而树形动态规划是建立在树上的,树中的父子关系天然就是个递归(子问题)结构,所以也相应的有两个方向。 (1)叶→根,即根的子结点传递有用的信息给根,之后由根得出最优解的过程。这种方式DP的题目应用比较多。 (2)根→叶,即需要取所有点作为一次根结点原创 2022-01-13 22:19:59 · 944 阅读 · 0 评论 -
区间类动态规划(dp)
一、问题引入 给定长为n的序列a[i],每次可以将连续一段回文序列消去,消去后左右两边会接到一起,求最少消几次能消完整个序列,n≤500。 与线性模型不同,这里消去的顺序是任意的,且消完后左右会接起来。但我们发现,不管消去的顺序是什么,每个时刻被消去的位置总是一段连续区间。 考虑消去区间[i,j]]时,若a[i],a[j]不在一起消去,则总能找到一个分界点k,使得我们能先消完[i,k]再去消[k+1,j]。注意这里是只考虑消[i,j],因此不考虑与外面一起消去。 若a[i],a[j]在一起原创 2022-01-12 22:35:46 · 1059 阅读 · 0 评论 -
倍增求LCA
一:定义LCA指的是最近公共祖先。具体地,给定一棵有根数,若结点z既是结点x的祖先,也是结点y的祖先,则称z是x,y的公共祖先。在x,y的公共祖先中,深度最大的那个节点成为x,y的最近公共祖先,记为LCA(x,y)。我们举个例子,如图4-4-1所示LCA(4,5)=2,LCA(5,6)=1,LCA(2,3)=1;二:如何求LCA我么考虑“暴力”要怎么实现找两点的LCA。e.g. LCA(7,5)=2;先DFS一遍找出每个点的DEP(深度)。然后先从深度大的7往上跳,跳到和5深度相同的点原创 2022-01-11 18:24:56 · 1045 阅读 · 0 评论 -
RMQ问题
RMQ就是一个查询区间最大最小值的问题,使用的是dp的思想RMQ:RMQ(Range Minimum/Maximum Query),即区间最值查询,是指这样一个问题:对于长度为n的数列A,回答若干询问RMQ(A,i,j)(i,j<=n),返回数列A中下标在i,j之间的最小/大值。本节介绍了一种比较高效的在线算法(ST算法)解决这个问题。所谓在线算法,是指用户每输入一个查询便马上处理一个查询。该算法一般用较长的时间做预处理,待信息充足以后便可以用较少的时间回答每个查询。ST(Sparse Tab转载 2022-01-06 11:29:58 · 534 阅读 · 0 评论 -
树状 数组
树状数组是一个查询和修改复杂度都为log(n)的数据结构。主要用于数组的单点修改&&区间求和.正所谓用树状数组能写的题,用线段树都能写,但用线段树能写的用树状数组不一定能写。但奈何树状数组写着简单啊比如说8这个节点,里面的值是原始数组中[5,8]的和lowbit:求x最低位的一int lowbit(x){return x&(-x);}单点更新:void update(int x,int y,int n){ for(int i=x;i<=n;i+=lowbi原创 2022-01-06 11:21:25 · 269 阅读 · 0 评论 -
博弈,常见博弈算法
佐威夫博弈:适用题型:有两堆各若干个物品,两个人轮流从任意一堆中取出至少一个或者同时从两堆中取出同样多的物品,规定每次至少取一个,至多不限,最后取光者胜利。我们把先手必输的局势定义为“奇异局势”;第一种(0,0)第二种(1,2)第三种(3,5)第四种 (4 ,7)第五种(6,10)第六种 (8,13)第七种 (9 , 15)第八种 (11 ,18)第n种 (a[k],b[k]) 每种奇异局势的第一个值(这里假设第一堆数目小于第二堆的数目)总是等于当前局势的差值乘上1.6原创 2021-10-12 18:05:18 · 1476 阅读 · 0 评论 -
线段树详解
C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了。A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就是要监视这些工兵营地的活动情况。由于采取了某种先进的监测手段,所以每个工兵营地的人数C国都掌握的一清二楚,每个工兵营地的人数都有可能发生变动,可能增加或减少若干人手,但这些都逃不过C国的监视。中央情报局要研究敌人究竟演习什么战术,所以Tidy要随时向Derek汇报某一段连续的工兵营地一共有多少人,例如Derek问:“Tidy,马上汇报第3个营地原创 2021-08-22 19:44:19 · 66 阅读 · 0 评论