摘要:
A. 2048 Game 题意:给出一个数组,问能不能通过一系列操作(将数组中的两个数相加变成另一个数),使得数组中包含2048,数组中的数全是2的指数,可以则输出YES 思路:只要有两个数比2048小且一样,则合并,直至不存在两个数一样且比2048小,之后看看数组中是否有2048即可。 D. Ma 阅读全文
posted @ 2020-02-02 23:02
StungYep
阅读(133)
评论(0)
推荐(0)
摘要:
博弈论 [TOC] 理论铺垫: 定义 P position 和 N position :其中P代表Previous,N代表Next。直观的说,上一次move的人有必胜策略的局面是P position,即 P position 代表先手必输, N position 代表先手必赢。 1.公平组合博弈(I 阅读全文
posted @ 2020-02-02 22:58
StungYep
阅读(2405)
评论(0)
推荐(0)
摘要:
数位dp [TOC] 定义 数位dp(Digit Entry DP)是一种计数用的dp,一般就是要哦统计区间 内满足一些条件的数的个数。所谓数位dp,字面意思就是在数位上进行dp。数位的含义:一个数有个位、十位、百位、千位......数的每一位就是数位啦! 数位dp的思想 数位dp的实质就是换一种暴 阅读全文
posted @ 2020-02-02 22:51
StungYep
阅读(827)
评论(0)
推荐(1)
摘要:
状态压缩DP [TOC] 1.状态压缩的定义 状态压缩的定义:我们知道任何一个二进制都可以对应唯一的十进制数,反过来也成立。 所以我们可以用一个数来代替一组数从而降低维数 。这种解题手段我们叫做状态压缩。 举个例子:如果数组中的某一行全是0或全是1,例如000,001,我们可以将000用0表示,00 阅读全文
posted @ 2020-02-02 22:50
StungYep
阅读(245)
评论(0)
推荐(0)
摘要:
树形dp [TOC] 树形dp的性质:没有环,dfs不会重复,而且具有明显而又严格的层数关系。 判断一道题是否是树形dp:首先判断数据结构是否是一棵树,然后是否符合动态规划的要求。如果都符合,那么是一道树形dp的问题。我们需要通过下面几个步骤来解题。 1.建树 建树过程中,我们需要通过数据量和题目的 阅读全文
posted @ 2020-02-02 22:46
StungYep
阅读(244)
评论(0)
推荐(0)
摘要:
[toc] 定义:区间dp就是在区间上进行动态规划,求解一段区间上的最优解。其主要思想就是现在小区间进行dp得到最优解,然后再利用小区间的最优解结合并大区间的最优解。 区间dp经典问题: 1.石子合并问题 有N堆石子排成一排,每堆石子有一定的数量。现要将N堆石子并成为一堆。合并的过程只能每次将相邻的 阅读全文
posted @ 2020-02-02 22:44
StungYep
阅读(259)
评论(0)
推荐(0)
摘要:
拦截导弹(acwing.1010) 【题意】:某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭。由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦 阅读全文
posted @ 2020-02-02 22:41
StungYep
阅读(179)
评论(0)
推荐(0)
摘要:
背包九讲 [TOC] 第一讲 01背包 01背包是每种武平只能选择一次,计算出最大价值的问题,先上01背包的状态转移方程: $$ f[i][j] = max\{f[i 1][j], f[i 1][j w[i]] + v[i]\} $$ 下面来解释一下这个状态转移方程: 这个方程非常重要,基本上所有跟 阅读全文
posted @ 2020-02-02 22:31
StungYep
阅读(3510)
评论(0)
推荐(7)
摘要:
[toc] 注:dp可能并不是求解该这些问题的最优算法,这里只是做一个dp 算法的简介。 概念 定义:假设现有一个 string = 最长连续子串:要求在原序列中连续,比如 str = 、`fghijklm`都是valid substring 最长连续子序列:相对顺序在原序列中不变即可;比如 str 阅读全文
posted @ 2020-02-02 22:27
StungYep
阅读(595)
评论(0)
推荐(0)
摘要:
线段树及其应用 [TOC] 线段树的几个基础操作:建树,单点查询,单点修改,区间查询,区间修改。其代码的主要思想为二分。参考博客: "https://blog.csdn.net/qq_39826163/article/details/81436440" 数据结构: 1.建树 建树的过程分为三步:1: 阅读全文
posted @ 2020-02-02 22:19
StungYep
阅读(416)
评论(0)
推荐(0)
摘要:
单调栈、单调队列及优先队列 [TOC] 1.单调队列 单调队列的描述:指队列中元素之间关系具有单调性,而且队首和队尾都可以出队,但是只有队尾可以进行入队操作。 其重要作用是找到前n个后者后n个数的最值。 其具体操作是:假设单调队列是单调递减队列,假设在插入元素v时,将队列尾部的元素同v比较,如果队列 阅读全文
posted @ 2020-02-02 22:17
StungYep
阅读(620)
评论(0)
推荐(0)
摘要:
并查集 并查集是数据结构中的一个重要算法,可以管理元素分组,并查集由三部分构成:初始化,找父节点,合并结点,直接来看并查集的模板: 阅读全文
posted @ 2020-02-02 22:16
StungYep
阅读(844)
评论(0)
推荐(0)
摘要:
st表 ST表类似树状数组,线段树这两种算法,是一种用于解决RMQ(Range Minimum/Maximum Query,即区间最值查询)问题的离线算法。 st表的预处理时间复杂度为$O(logn)$,查询为$O(1)$,而线段树的查询为$O(logn)$。 我们定义:$dp[i][j]$为 i 阅读全文
posted @ 2020-02-02 22:00
StungYep
阅读(185)
评论(0)
推荐(0)
摘要:
3.卢卡斯定理 可用于求组合数mod p的值,其公式为: $$ C_{n}^{k}=(C_{\frac{n}{p}}^{\frac{k}{p}} C_{n\%p}^{k\%p})\% p $$ 上模板: 阅读全文
posted @ 2020-02-02 21:55
StungYep
阅读(167)
评论(0)
推荐(0)
摘要:
组合数和排列数 $$ 组合数公式:C_{a}^{b}=\frac{a!}{b! (a b)!} $$ $$ 排列数公式:A_{a}^{b}=a (a 1) ... (a b+1)=\frac{a!}{(a b)!} $$ 组合数:a个人中选b个人且不考虑性质; 排列数:a个人中选取b个人且考虑b个人 阅读全文
posted @ 2020-02-02 21:53
StungYep
阅读(752)
评论(0)
推荐(0)
摘要:
中国剩余定理 定义: 中国剩余定理其实就是多个线性同于方程的方程组;举个例子,《孙子算经》中曾提到过这样一个问题: 有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二,问物几何。 其实这就是一个经典的中国剩余定理的例子。 算法流程: 计算所有模的积n 对于第 i 个方程:计算mi = n/ni 阅读全文
posted @ 2020-02-02 16:18
StungYep
阅读(434)
评论(0)
推荐(0)
摘要:
线性同余方程 定义:形如 ax ≡ b (mod c)的方程被称为线性同余方程。 求解方法:线性同余方程可以通过两个定理求解得出答案: 定理1: 方程 ax + by = c 与方程 ax ≡ b ( mod c )是等价的,有整数解的充要条件是 gcd( a, b ) | c,即ab的最大公约数可 阅读全文
posted @ 2020-02-02 16:16
StungYep
阅读(393)
评论(0)
推荐(0)
摘要:
乘法逆元 定义:如果一个线性同余方程 ax ≡ 1 ( mod b ),则称 x 为 a mod b 的逆元,计做a^( 1) . 只有两个数互素的时候才有乘法逆元,两个数不互素是没有乘法逆元的 。 用途:乘法逆元一般用于求解解决模意义下分数值的问题。 乘法逆元可以通过多种方法求得,下面介绍几种方法 阅读全文
posted @ 2020-02-02 16:12
StungYep
阅读(431)
评论(0)
推荐(0)
摘要:
常用素数筛 [TOC] 1.暴力 2.埃拉托斯特尼筛法(埃氏筛法) 该筛法可以引申为一种思想,绝不仅限于用于筛素数 3.线性筛法 该筛法是基于唯一分解定理之上 铺垫:唯一分解定理:任何大于1的自然素都可以写成有限个质数的乘积 阅读全文
posted @ 2020-02-02 15:41
StungYep
阅读(224)
评论(0)
推荐(0)
摘要:
[TOC] 欧拉函数 定义:欧拉函数指对于以正整数n,phi[n]=1~n(不包括n)中与n互质的正整数的个数。 下面给出求解欧拉函数的两种方法:直接求解和打表法; c include using namespace std; typedef long long LL; const int maxn 阅读全文
posted @ 2020-02-02 15:39
StungYep
阅读(416)
评论(0)
推荐(0)
摘要:
欧几里德算法与扩展欧几里德算法 [TOC] 1.欧几里德算法 阅读全文
posted @ 2020-02-02 15:36
StungYep
阅读(192)
评论(0)
推荐(0)
摘要:
快速幂 [TOC] 实数快速幂 普通求幂的方法为 O(n) 。在一些要求比较严格的题目上很有可能会超时。所以下面来介绍一下快速幂。 快速幂的思想其实是将数分解,即a^b可以分解为(a^2) (a^2)...a;然后再分别算a^2;这样的计算量由O(n)一下变成 $O(logn)$; 模板代码如下: 阅读全文
posted @ 2020-02-02 15:34
StungYep
阅读(149)
评论(0)
推荐(0)
摘要:
高精度四则运算 [TOC] 1.高精度加法 2.高精度减法 4.高精度除法 传入参数:分别为被除数,除数以及选择返回商还是余数( 1求商2求余 ) 阅读全文
posted @ 2020-02-02 15:32
StungYep
阅读(501)
评论(0)
推荐(0)
摘要:
分解质因数 可用试除法,判断质数是不是它的因子以及有多少个该因子即可; 阅读全文
posted @ 2020-02-02 15:31
StungYep
阅读(153)
评论(0)
推荐(0)
摘要:
记忆化搜索 先说结论:什么是记忆化搜索? 1.不依赖任何 外部变量 。 2.答案一返回值的形式存在,而不能以参数的形式存在。 3.对于同一组参数,dfs的返回值是相同的,因为第一次都已经记录过。 记忆化算法在求解的时候还是按着自顶向下的顺序,但是每求解一个状态,就将它的解保存下来,以后再次遇到这个状 阅读全文
posted @ 2020-02-02 15:29
StungYep
阅读(1217)
评论(0)
推荐(0)
摘要:
BFS(广度优先搜索) 最简单的搜索包含 DFS 和 BFS,他们分别有着下面不同的用途和区别: 区别于用途: 1.BFS是用来搜索最短径路的解是比较合适的,比如求最少步数的解,最少交换次数的解,因为BFS搜索过程中遇到的解一定是离根最近的,所以遇到一个解,一定就是最优解,此时搜索算法可以终止。这个 阅读全文
posted @ 2020-02-02 15:28
StungYep
阅读(777)
评论(0)
推荐(0)
摘要:
DFS(深度优先搜索) 最简单的搜索包含 DFS 和 BFS,他们分别有着下面不同的用途和区别: 区别于用途: 1.BFS是用来搜索最短径路的解是比较合适的,比如求最少步数的解,最少交换次数的解,因为BFS搜索过程中遇到的解一定是离根最近的,所以遇到一个解,一定就是最优解,此时搜索算法可以终止。这个 阅读全文
posted @ 2020-02-02 15:26
StungYep
阅读(720)
评论(0)
推荐(0)
摘要:
A 算法 A ( A star )算法,又称启发式搜索算法,与之相对的,dfs与bfs都成为盲目型搜索;即为带有估价函数的优先队列BFS称为A 算法。 该算法的核心思想为设计一个估价函数,估价函数需要满足下面几个准则: 1:设当前状态state到目标状态所需的估计值为$f(state)$。 2:在未 阅读全文
posted @ 2020-02-02 15:24
StungYep
阅读(533)
评论(0)
推荐(0)
摘要:
Prim、Kruskal算法求解最小生成树 [TOC] 关于最小生成树有两个很重要的算法:Prime(普利姆)算法和Kruskal(克鲁斯卡尔)算法,下面是这两个算法的代码上的基本实现: Prime算法 该算法利用了最小生成树的MST性质,该算法很好的运用了贪心算法,其基本思想是随机选取一个结点,找 阅读全文
posted @ 2020-02-02 15:10
StungYep
阅读(220)
评论(0)
推荐(0)
摘要:
最近公共祖先 [TOC] 定义:给定一颗有根树,若结点 z 既是 x 的祖先,也是 y 的祖先,则称 z 是 x,y 的公共祖先。 在 x,y 所有的公共祖先中,深度最大的一个称为 x,y 的最近公共祖先,简称$LCA(x,y)$。 求解最近公共祖先一般有三种解法:向上标记法,树上倍增法和 Tarj 阅读全文
posted @ 2020-02-02 15:05
StungYep
阅读(519)
评论(0)
推荐(0)
摘要:
k短路算法 求解k短路用到了A 算法,A ( A star )算法,又称启发式搜索算法,与之相对的,dfs与bfs都成为盲目型搜索;即为带有估价函数的优先队列BFS称为A 算法。 该算法的核心思想为设计一个估价函数,估价函数需要满足下面几个准则: 1:设当前状态state到目标状态所需的估计值为$f 阅读全文
posted @ 2020-02-02 15:01
StungYep
阅读(380)
评论(0)
推荐(0)
摘要:
1.次短路问题 次短路问题和最短路问题类似,我们可以想到次短路由什么转移而来?对于当前一个点,其次短路只可能由两种情况转移而来: c++ include using namespace std; const int inf=0x3f3f3f3f; const int maxn=1e5+10; int 阅读全文
posted @ 2020-02-02 14:59
StungYep
阅读(261)
评论(0)
推荐(0)
摘要:
拓扑排序 定义:拓扑排序是指在 有向无环图 中,将所有的结点进行排序,最终得出的序列称为拓扑序。 先来看一个模板代码: c++ include include include include using namespace std; const int maxn=210; int od[maxn], 阅读全文
posted @ 2020-02-02 14:57
StungYep
阅读(141)
评论(0)
推荐(0)
摘要:
树的重心 定义:树的重心也叫作树的质心。对于一颗无根树,找到一个点,使得把树变成以该点为根的有根树时,最大子树的结点数最小。换句话说,删除这个点后最大连通块(一定是树)的结点数最小。 性质: 1. 树中所有点到某个点的距离和中,到重心的距离和是最小的,如果有两个距离和,他们的距离和一样。 2. 把两 阅读全文
posted @ 2020-02-02 14:54
StungYep
阅读(467)
评论(0)
推荐(0)
摘要:
树的直径 [TOC] 定义:树的直径为树中最远的两个节点的距离之和。在求树的直径时一般有两种方法:树形dp或则两个BFS(DFS也可以)。 1.树形dp求解树的直径 思路:由树的直径定义可知:其树形dp的状态转移方程为: $$ D[x]=max(D[y_i]+Edge(x_i,y_i)) $$ 其中 阅读全文
posted @ 2020-02-02 14:53
StungYep
阅读(442)
评论(0)
推荐(0)
摘要:
求解最短路的四个算法及其优化 [TOC] 1.Dijkstra算法 Dijkstra很好的运用了贪心算法,其思想是一直找离已加入顶点集合的最短边,更新邻点,下面是实现代码: 【题意】:给定一个n个点m条边的有向图,图中可能存在重边和自环,所有边权均为正值。请你求出1号点到n号点的最短距离,如果无法从 阅读全文
posted @ 2020-02-02 14:51
StungYep
阅读(408)
评论(0)
推荐(0)
摘要:
图的存储方式 在说最短路之前,先介绍一下图的几个存储方式:主要有vector、邻接表和链式前向星三种存储方式。其中会牵扯到稀疏图和稠密图的概念, 稠密图指点的个数的平方和边的个数是一个数量级的($n^2 ≈ m$) , 两者数量级类似别称为稀疏图 。 G[maxn]; for(int i=1;i f 阅读全文
posted @ 2020-02-02 14:48
StungYep
阅读(345)
评论(0)
推荐(0)
摘要:
点分治 [TOC] 点分治是一种基于树的重心,统计树上路径的优秀算法。将树上的路径分为经过树的重心和不经过树的重心两种,同时利用树的重心性质,使得递归深度不超过 $logn$次。总的时间复杂度为$nlog^2n$ 。 【题意】:poj_1741 求解一个树上所有边的和不超过k的共有多少个 c++ i 阅读全文
posted @ 2020-02-02 14:47
StungYep
阅读(160)
评论(0)
推荐(0)
摘要:
Tarjan算法与无向图的连通性 [TOC] 1:基础概念 在说Tarjan算法求解无向图的连通性之前,先来说几个概念: ①:是$subtree(x)$的结点; ②:通过一条不在搜索树上的边,能够到达$subtree(x)$的结点 在了解概念之后,我们可以根据定义来计算$low[x]$: 令$low 阅读全文
posted @ 2020-02-02 14:28
StungYep
阅读(227)
评论(0)
推荐(0)
摘要:
字符串匹配算法(暴力匹配与kmp算法) [TOC] 1.暴力匹配算法 顾名思义,暴力匹配算法就是用for循环暴力匹配,将两个字符串逐一匹配,一直匹配到两个字符串相等或者直至字符串匹配结束,其时间复杂度为O(mn),其基本模板为: c++ void GetNext(string s1,int next 阅读全文
posted @ 2020-02-02 14:26
StungYep
阅读(258)
评论(0)
推荐(0)
摘要:
字符串的最小表示法 定义:如果一个字符串可以循环:如 →`1001 1100 0110`具有这种性质的字符串,那么它一定有一种或者多种最小表示法使得该字符串的字典序最小。 解法: 设三个指针i,j,k;初始化 ,`j=1 k=0`;先找到 i+k 和 j+k 的第一个不同的位置下标,那么不同位置之前 阅读全文
posted @ 2020-02-02 13:47
StungYep
阅读(187)
评论(0)
推荐(0)
摘要:
字典树 [TOC] 字典树又称 Trie 树,是一种树形结构。其典型应用是用于统计和排序大量的字符串(但又不仅限与字符串),也可以快速查找前缀。 字典树有三个基本性质: 1.根节点不包含字符,除根节点外的每一个结点都只包含一个字符。 2.从根节点到某一节点,路径上经过的字符连接起来,为该结点对应的字 阅读全文
posted @ 2020-02-02 13:38
StungYep
阅读(175)
评论(0)
推荐(0)
摘要:
哈希表 哈希表又称散列表,其主要思想是将字符串映射成一个 int 或是其他数据类型的数据,从而在比较的时候可以实现 O(1) 的复杂度。 通常我们采用的是多项式Hash的方法,其具体实现公式一般为: $$ f(s) = \sum s[i] b^i (mod\ M) $$ 由上式可知,哈希其实是有非常 阅读全文
posted @ 2020-02-02 13:31
StungYep
阅读(166)
评论(0)
推荐(0)
摘要:
Manacher算法是一个求字符串的最长回文子串一种非常高效的方法,其时间复杂度为O(n)。下面分析以下其实行原理及代码: 1.首先对字符串进行预处理 因为回文分为奇回文和偶回文,分类处理比较麻烦,所以我们先要做一个预处理,在字符之间插入一个特殊字符(注意这个新插入的字符不能再原字符串中出现),这样 阅读全文
posted @ 2020-02-02 13:29
StungYep
阅读(169)
评论(0)
推荐(0)
摘要:
基础:AC自动机是建立在 trie 树和 kmp 基础之上的,为什么这么说,因为AC自动机是基于字典树的数据结构之上的,其次它是一个自动机,用到了 kmp 的失配数组的思想。 应用:在模式匹配的问题中,如果模板有很多个,可以用AC自动机来求解。 结构:字典树结构: Fail数组(失配数组):如果现在 阅读全文
posted @ 2020-02-02 13:26
StungYep
阅读(256)
评论(0)
推荐(0)
摘要:
前缀和 [TOC] 前缀和顾名思义就是前x个数组元素之和,二维前缀和就是(1, 1)到(i, j)中矩形内所有元素的和。 include include include using namespace std; const int maxn=5005; int arr[maxn][maxn],sum 阅读全文
posted @ 2020-02-02 13:23
StungYep
阅读(556)
评论(0)
推荐(1)
摘要:
离散化可以将无穷大集合中的若干个元素映射到有限集合中以便于统计的方法。在数据范围特别大而元素个数有限我们又需要遍历的时候,可以离散化一下,注意不同题目的离散化要求可能不一样,这里给出一种比较常见的离散化代码,不同题目要做相应的修改(比如线段树区间染色要将中间加个1): c++ include usi 阅读全文
posted @ 2020-02-02 13:05
StungYep
阅读(295)
评论(0)
推荐(0)
摘要:
1.选择排序法 每循环一次将最值挑出来放在前面,实践复杂度为O(n^2),不稳定排序,其基本的语法如下: 2.冒泡排序法 每循环一次将最值冒到尾部,时间复杂度为O(n^2),稳定排序,其基本的语法如下: 3.C++STL之sort排序 sort排序可以捆绑结构体一起使用,求出原来的序号和排序后的序号 阅读全文
posted @ 2020-02-02 13:03
StungYep
阅读(179)
评论(0)
推荐(0)
摘要:
二分 [TOC] 二分是一种思想,其不仅限于查找。其中查找是一个很典型的应用。个人对二分的理解:如果一个题目告诉你最大答案范围,即在那个范围里肯定存在一个答案,那么就可以用二分(查找很典型了吧,不过查找也可以找不到,最后arr[mid]!=num to be find)。 二分查找是一种查找效率非常 阅读全文
posted @ 2020-02-02 12:45
StungYep
阅读(730)
评论(0)
推荐(0)
摘要:
STL及一些常用函数的基本用法 [TOC] 1.vector(向量)的基本用法 vector是C++的STL中一个常见的容器,使用时需要加上\ include\的头文件,其可以动态储存数据,既可以很方便的实现插入,删除等基本操作,其基本语法如下: c++ include include using 阅读全文
posted @ 2020-02-02 12:27
StungYep
阅读(1095)
评论(0)
推荐(1)

浙公网安备 33010602011771号