算法学习
zxdxz
xdu-预备役程序员。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
数位DP
记录今天在Acwing学习的几道数位Dp题目,整理了思路,方便以后的复习: 1.度的数量 题目描述 求给定区间 [X,Y] 中满足下列条件的整数个数:这个数恰好等于 K 个互不相等的 B 的整数次幂之和。 例如,设 X=15,Y=20,K=2,B=2,则有且仅有下列三个数满足题意: 17=24+2017=2^4+2^017=24+20 18=24+2118=2^4+2^118=24+21 20=24+2220=2^4+2^220=24+22 样例 输入 15 20 2 2 输出 3 数位DP K个互不原创 2020-11-09 18:56:56 · 244 阅读 · 0 评论 -
DP-LIS
写在前面:学DP掌握基础很重要,这里记录一下LIS和LCS,(希望每次在记录时能够收获新的东西 引入问题: 给定一个长度为N的数列,求数值严格单调递增的子序列的长度最长是多少。 N有这两个数据范围: 1.1≤N≤10001≤N≤10001≤N≤1000 2.1≤N≤1000001≤N≤1000001≤N≤100000 样例: Input: 7 3 1 2 1 8 5 6 output: 4 一.1≤N≤1000 对序列中一个的数a[i]来说,我们定义dp[ i ] 表示以a[i]这个数结尾的最长上升子序列的原创 2020-11-09 18:51:42 · 243 阅读 · 0 评论 -
树状数组
复习一下树状数组 树状数组 一种用于处理单点修改和区间查询的数据结构。 树状数组C的定义: C[x] = Sum a[x-lowbit(x)+1,x], 即数组C表示原数组某一区间段的和。 lowbit操作 int lowbit(int x){ return x&-x; } 单点修改 O(logN) 对于树形结构,我们如果修改一个点的话,对于他祖宗节点的影响是单一的,即我们可以通过一层一层向上更新包含这个节点的所有C数组的值。 int update(int u,int x){原创 2020-11-09 18:48:33 · 151 阅读 · 0 评论 -
并查集
并查集 对于某些集合问题,涉及到大量查询操作(查询两个元素是否属于同一集合或是查询某一个元素的祖宗节点),如果使用一般的数据结构,时间和空间开销都比较大,而并查集则可以高效地解决这一类问题。 并查集是一种树状数据结构,用来解决集合间的合并以及元素的查询问题,每个集合可以理解为一棵树,不同的集合构成一个森林。 我们来看并查集的一个简单的应用: 1.Acwing836.合并集合 一共有n个数,编号是1~n,最开始每个数各自在一个集合中。 现在要进行m个操作,操作共有两种: 1.“M a b”,将编号为a和b的原创 2020-11-08 16:56:18 · 221 阅读 · 0 评论 -
差分约束
差分约束 (1)求不等式组的可行解 原点需要满足的条件:从原点出发,一定可以走到所有的边。 (这一点必须要满足,否则会遗漏某些不等式) 步骤: 先将每个不等式Xi <= Xj + Ck,转化成一条从Xj走到Xi,长度为Ck的一条边。 找一个超级原点,保证这个原点一定可以遍历所有边。 从原点求一遍单源最短路: 1 .如果存在负环,则原不等式组一定无解。 2 .如果不存在负环,则dist[i]就是原不等式组的一个可行解。 根据不等号的方向,建图时注意方向。 (2)如何求最大值或者最小值(这里的最值原创 2020-11-08 16:55:43 · 566 阅读 · 0 评论 -
求逆元
逆元的定义 若整数b,m互质,并且b|a,则存在一个整数x,使得a/b≡a∗x(mod m),则称x为b的模m乘法逆元,记为b−1(mod m)。 b存在乘法逆元的充要条件是b与模数m互质。否则,b不存在乘法逆元。当模数m为质数时,b^(m−2)即为b的乘法逆元。 题目示例:Acwing876.快速幂求逆元https://www.acwing.com/problem/content/878/ 代码: //求逆元模板 #include <iostream> #include <algori原创 2020-11-08 16:55:15 · 180 阅读 · 0 评论 -
简单贪心
贪心算法是指,在对问题求解中,对问题的每一步决策都采取当前意义下最优策略的算法,即问题的整体最优性可以由局部最优性来导出。 贪心算法的正确性需要证明,常见的手段有:微扰(邻项交换),反证法,数学归纳法,范围缩放,决策包容性 我们来看几道基础的贪心题: 1.Acwing913排队打水 、 洛谷P1223排队接水 (两题题意一致,仅输入输出要求不同) 有 n 个人排队到 1 个水龙头处打水,第 i 个人装满水桶所需的时间是 ti,请问如何安排他们的打水顺序才能使所有人的等待时间之和最小? 输入格式 第一行包含原创 2020-11-08 16:54:35 · 304 阅读 · 0 评论 -
欧拉回路
欧拉通路与欧拉回路 欧拉通路: 对于图G来说,如果存在一条通路包含G中所有的边,则该通路成为欧拉通路,也称欧拉路径。 欧拉回路: 如果欧拉路径是一条回路,那么称其为欧拉回路。 欧拉图 : 含有欧拉回路的图是欧拉图。 对有无向图G和有向图H: 图G存在欧拉路径与欧拉回路的充要条件分别是: 欧拉路径: 图中所有奇度点的数量为0或2。 欧拉回路: 图中所有点的度数都是偶数。 图H存在欧拉路径和欧拉回路的充要条件分别是: 欧拉路径: 所有点的入度等于出度 或者 存在一点出度比入度大1(起点),一点入度比出度大1(原创 2020-11-08 16:54:03 · 1518 阅读 · 0 评论 -
Manacher算法
看这样一道例题: hdoj-3068.最长回文 给出一个只由小写英文字符a,b,c…y,z组成的字符串S,求S中最长回文串的长度. 回文就是正反读都是一样的字符串,如aba, abba等 Input:输入有多组case,不超过120组,每组输入为一行小写英文字符a,b,c…y,z组成的字符串S 两组case之间由空行隔开(该空行不用处理) 字符串长度len <= 110000 Output:每一行一个整数x,对应一组case,表示该组case的字符串中所包含的最长回文长度. Sample原创 2020-11-08 16:52:12 · 147 阅读 · 0 评论 -
AC自动机学习笔记
先简单复习一下学习AC自动机所需要的前缀知识。 #前缀知识 1-Trie树 字典树,也称Trie树,前缀树,主要用于存储大量的字符串以及查询操作。 对于Trie树,一般有两个操作: 1.insert操作,在Trie树中存储一个字符串 2.query操作,在Trie树中查询一个字符串 举个例子,对于这样几个字符串,{abcde,abcgf,hello,her}我们看他们在Trie树中是如何存储的: 这里需要注意,字符是边,而不是节点,但都是一一对应的 代码 int son[N][26],cnt[N],i原创 2020-11-08 16:51:22 · 388 阅读 · 0 评论
分享