Sorry, your browser cannot access this site
This page requires browser support (enable) JavaScript
Learn more >

KMP 算法是 D.E.Knuth、J,H,Morris 和 V.R.Pratt 三位神人共同提出的,称之为 Knuth-Morria-Pratt 算法,简称 KMP 算法。 问题:求 a 字符串与 b 字符串中子串相同的串首位置。 暴力就不说了,设 a 长 \(m\),b 长 \(n\),每次枚举比对每个字符,复杂度 \(O(nm)\)。 KMP 主要思想:如果一个字符串的子...

LCT维护一个森林,即把每个节点用splay维护,可以进行许多操作: 查询、修改链上的信息 随意指定原树的根(即换根) 动态连边、删边 合并两棵树、分离一棵树 动态维护连通性 等 主要性质 每一个Splay维护的是一条从上到下按在原树中深度严格递增的路径,且中序遍历Splay得到的每个点的深度序列严格递增。 每个节点仅包含于一个splay中。 边分为实边和虚边...

P1414 又是毕业季II 数论题,主要在于推演。 洛谷的《又是毕业季I》更好玩 发现对于所有的同学的能力值,只要我们选出每个数的所有因子并记录所有同学所有因子出现的次数,就可以得到一个 \(c\) 数组为所有因子出现的次数。 因为让输出 \(1\sim n\) 所有的值,而且因子数 c[k-1]>=c[k],我们就一定可以从因子数最高的 \(c\) 向下遍历到 c[i...

P1040 加分二叉树 \(n\) 很小,可以树形 dp 或者区间 dp 。 设 f[i][j] 为从 \(i\) 到 \(j\) 的最大加分值,则有 f[i][j]=max(f[i][k-1]*f[k+1][j]+f[k][k])。 有一个小技巧,将 f[i][i-1] 全部设置为 1,这样的话搜索到叶子就也可以按照通式 dp 了。 对于输出前序遍历(根,左树,右树)我们再...

P1447能量采集 定义:(i,j)表示处于(i,j)的植物的贡献 我们发现,点(i,j)与(0,0)的连线所过整点的数目为\(\gcd(i,j)\) 发现要是想记录每个点的答案并不好算。那么怎么好算呢? 我们来找一找同一直线上的所有点答案的和的关系。先不考虑答案只考虑个数。发现,寻找一个点及其倍数的个数的和更加好算。而且,因为有n和m的限制,那么向下取整的答案一定就是其本身...

P1880 [NOI1995] 石子合并 一道区间dp题目。 用 d[i][j] 表示从 i 到 j 的最大/最小得分,那么依次枚举长度 len,坐标 i 和 j,三层循环就可以 dp递推求得最值了。 (如果没有环的话) 不要着急,我们将序列复制一遍接到后面做一遍即可。 12345678910111213141516171819202122232425262728293031...

莫队算法的待修版本,增加一个时间的维度进行分块。 P1903 [国家集训队] 数颜色 / 维护队列 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757...

洛谷P2014选课 一道树形DP题。 f[i][j] 表示i个点选j门课程的最大学分。 递推方程: 1234for(int a=n;a>0;a--)//总共选择多少 for(int b=0;b<a;b++)//分别选择多少(b,a-b) f[x][a]=max(f[x][a],f[x][a-b]+f[u][b]);//都不遍历0的原因是f[i][0]无...

P2375 [NOI2014]动物园 我竟然会做NOI的题目辣(≧▽≦)/(看的题解 总而言之,这是一道简单的KMP问题。题面简直是给没学过KMP的人看的(比如我)。 我们发现,这个所谓的 num 数组和 nxt 有异曲同工之妙。但是我们对于不能重合这一块有一点问号。那我们先不管重不重合,先给他记录成重合的。 于是在标记 nxt 时同时也可以把 num 标记。原理是,nxt ...

P2476-记忆化搜索 DP? 我们看看,这个状态似乎有亿点点多。我们看看数据范围,数量不超过5,颜色数不超过15. 15维DP显然不靠谱。 那么我们就思考一下……状态个数?发现记忆化搜索可ac: 1234567891011121314151617181920212223242526272829303132#include<iostream>#include<cs...