自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(33)
  • 收藏
  • 关注

原创 【acwing4408李白打酒】

思路:这是一道状态机题目,要把三种状态都用数组表示出来,所以要三维。

2023-02-25 16:33:37 72

原创 【洛谷P1359租用游艇】

思路:根据题意,只有小的点能转移到大的点,所以转移方程就是对于每一个点,把小于它的点都遍历一遍,然后取min。

2023-02-25 16:13:34 85

原创 蓝桥杯复习

(模拟+取模+环形数组)(浮点二分+题意思维)(前缀和+取模+数学)

2023-02-08 16:40:16 142

原创 背包问题加深

二维:f[0][j] 初始化为1,其余为0,并且要保证背包剩余体积不为负数。二维:f[0][0] 初始化为1,其余为0,并且要保证背包剩余体积不为负数。一维:f[0] 初始化为1,其余为0,并且要保证背包剩余体积不为负数。二维:f[0][0] 初始化为1,其余为0,背包剩余体积可以为负数。一维:f[0] 初始化为1,其余为0,背包剩余体积可以为负数。一维最小值:f[0] 初始化为0,其余为INF。二维最小值:f[0][0] 初始化为0,其余为INF。二维最小值:f[0][0] 初始化为0,其余为INF。

2023-02-07 15:49:01 73

原创 搜索算法加深

(2)对于前缀数组的更新,是覆盖式的,所以对于最短路,每次更新时如果该点已经被搜过(即前缀数组有值),就不要再更新了,因为那不是最短路、(1)题目有时要求输出方案和路径的序列,所以就要用一个前缀数组把序列存起来。在bfs时,对于每一个点,每次都会扩展这个点的。方案,所以不需要再重新来一遍,所以也需要判重数组。,需要恢复现场,所以只能用dfs;(3)在dfs时,在回溯之前,每次搜的都是。,就不用恢复现场,用dfs和bfs都可以。(4)对于bool类型的dfs,,而是继续搜索其他方案。(1)bfs更新时,

2023-02-06 18:20:46 39

原创 拓扑排序加深

(3)拓扑排序的特点有一个是 “入度为0” 的点,在这里可能会涉及到一些别的操作,主要看题目的情景。(2)拓扑排序有时能用floyd和传递闭包代替,但是。,而传递闭包只能判断连通性和对应关系是否存在。(1)拓扑排序必须是有向图,而且它的。(4)拓扑排序和其他一些树和图一样,

2023-02-05 17:25:28 36

原创 离散化总结

对于题目的输入数据,如果数据很稀疏(数据量较小,但值域很大),就要进行离散化,否则就可能超时,或者数组爆掉。

2023-02-04 17:22:47 47

原创 Floyd加深

(1)对于 i,j 两点,如果能形成通路,那么就在两点间连一条边,通常在。(也可以说成 d[i][j] 和 d[j][i] 两个都。,然后还要求两点之间的最大值,这时候不是求最长路,而是求。(3)对于传递闭包的关系判断,如果。(2)floyd判断连通块通常是在。有通路),那么就说明有矛盾;(1)floyd通过判断。,那么就说明关系不确定。,那么关系就是唯一确。(4)传递闭包必须是。

2023-02-04 16:24:11 43

原创 单源最短路加深

求最大值边权必须小于0;求最小值边权必须大于0;求最大乘积边权必须小于1;求最小乘积边权必须大于1。(4)单源最短路求的是起点到其他任意一点的最短路,所以单源最短路也可以求。(5)单源最短路也可以做的很像最小生成树,求。无论是正的负的,还是加的乘的,(6)单源最短路可以是。(最基础的单源最短路)(起点与其他所有点)(起点与其他所有点)

2023-02-04 12:23:16 45

原创 最小生成树

(1)对于一张图里面的n个点,最小生成树只能有n-1条边,所以最小生成树可以用于去环(2)最小生成树必须是无向图才可以计算(3)除了最小生成树,还可以求最小生成森林。

2023-02-04 11:17:38 66

原创 归并及其应用

(1)归并的本质是分治,先分到最小,再按照某一规则合并(2)归并的分是采用递归的方式。

2023-01-31 20:53:42 43

原创 图论最短路杂项

Dijkstra只能用于求解正边权的最短路,其时间复杂度只与点数有关;堆优化的Dijkstra,其时间复杂度既与点数有关,也与边数有关;,用邻接表存图的话不用做特殊处理,但是用邻接矩阵存图的话,就要取最小值。(4)如果有负权回路,并不说明在求解最短路的过程中一定会死循环,只是说。bellman-ford用于求解有负权边的最短路问题,并且可以规定。spfa也是用于求解有负权边的最短路问题,其实质上是。问题,它既可以处理正权边,也可以处理负权边,但是。(3)bellman-ford算法:复杂度。

2023-01-29 20:55:39 54

原创 Floyd算法

(1)floyd算法是基于动态规划思想的一种最短路算法(2)floyd用于处理多源汇最短路问题,也可以处理单源最短路,但是因为其时间复杂度较高,所以单源最短路一般还是选用其他算法(3)floyd不能处理有负权回路的最短路问题。

2023-01-29 16:49:30 158

原创 spfa算法

(1)spfa实质上是用队列优化的bellman-ford算法,在bellman-ford中,我们每一轮的松弛操作都需要遍历所有的边,但是有些边是不需要遍历的,所以我们把需要更新的边的起点放入队列中,更新队列里面存在的就行了(2)虽然bellman-ford也可以判断负环,但是一般用spfa。

2023-01-29 11:13:08 505

原创 Bellman-ford算法

(1)bellman-ford算法用于求解有负权边的最短路问题(2)bellman-ford可以用于判断有无负权回路(3)bellman-ford可以用于求解最多经过k条边的最短路问题。

2023-01-28 19:33:57 190

原创 拓扑排序基础

所以可以通过这点来判断一张图有没有环(即有没有拓扑序)(2)若队列不为空,每次取出队首数据,存放到一个数组中。(1)每张图的拓扑序列可能不唯一(每个时刻。(2)既可以用邻接表,也可以用邻接矩阵。,来判断是否有拓扑序。

2023-01-27 21:46:54 47

原创 迪杰斯特拉(Dijkstra)算法

(1)Dijkstra算法用于求解最短路问题,且所有的边权都必须为正(2)Dijkstra算法有朴素版本和堆优化版本两种;一般来说,如果是稠密图,就用朴素的,如果是稀疏图,就用堆优化的(3)稠密图或者点数比较少时一般用邻接矩阵,稀疏图或者点数比较多时一般用邻接表(邻接矩阵在有重边时要取最小值,邻接表则不用考虑重边)

2023-01-27 20:48:43 644

原创 背包专题题目

(二维费用+满足最优解的最小值)(完全背包求组合是否存在)(01背包求组合数)(完全背包求组合数)(完全背包求组合数)

2023-01-23 00:02:29 50

原创 STL常用操作

to_string() 函数可以把数字转换为字符串。字符串的查找如果查找不到,就会返回。

2023-01-21 17:15:47 134

原创 动态规划基础

01背包只有选和不选两种情况,并且每种物品只有1个。数字三角形如果数据中有负数,则需要。,如果直接取max的话会取到负数。完全背包的每种物品都有无限件。详细的说明在题目代码注释中。

2023-01-18 17:01:04 59

原创 树与图的存储与遍历

一、存储方式:(1)邻接矩阵邻接矩阵就是一个二维数组g[a][b],存储由a到b的边。如果边没有权值,那么邻接矩阵就是bool类型的;如果有权值,那么邻接矩阵就用于存储权值,不存在的边就用一个数表示边不存在(2)邻接表邻接表是链式的存图形式,在这里以数组的形式写(3)链式前向星链式前向星看起来和邻接表很像,但是我不会,以后学。

2023-01-13 23:35:39 64

原创 搜索与剪枝总结

(已做笔记) ​​​​​​​。常见的dfs问题有:全排列问题、组合数问题、N皇后问题。常见的bfs问题:最短路问题、最少操作次数问题。,但是需要事先排序,可能会超时)组合数问题的写法:(也可以。

2023-01-12 22:48:44 79

原创 树状数组总结

(1)一般来说,树状数组用来维护一个数组的前缀和,这个数组可以是差分数组,也可以是原数组;除此之外,树状数组延申出来另一个性质,可以表示数组中某个数存在或不存在。(2)用树状数组维护的数组下标一般从1开始。

2023-01-12 00:48:54 91

原创 位运算基础

(1)因为二进制只有0或1,所以一个二进制数也可以用来表示每个点只有两个状态的矩阵。(2)num>>cnt&1表示整数num的第cnt+1位(二进制位)的数是多少。对于一个整数,它的二进制位如果异或上一个1,那么这个二进制位上的数就会改变。

2023-01-09 17:01:21 63

原创 寒假杂题练习

(小根堆+多路归并)(自定义排序+打表优化时间复杂度)(推公式优化时间复杂度+前缀和)(贪心+多路归并证明+等差数列)(合并石子 枚举+构造)(乘法原理+构造+枚举)(排序不等式,反哈夫曼)(模拟+找规律推公式)(反悔贪心+小根堆)

2023-01-09 11:54:33 97

原创 哈夫曼树基础

(1)哈夫曼树涉及到最短带权路径,其中离根节点最近的叶子节点权值最大,最远的权值最小,这样就能保证总的最短带权路径最小。(3)哈夫曼树要满足没有前缀这一原则,所以。在哈夫曼树中,只有叶子节点是有权值的。(4)哈夫曼树是一棵完全二叉树。(2)哈夫曼树应该每次。

2023-01-09 11:39:46 165

原创 堆(二叉堆)总结

堆的操作有up和down,down 和 up 都是。变形之后的堆与一般的堆的不同之处在于可以修改和删除。,而是要用heap_swap()函数对。对于变形之后的堆,在进行节点的。(1)小根堆(小堆、最小堆)(2)大根堆(大堆、最大堆)

2023-01-07 15:32:58 32

原创 并查集总结

优化的数据结构,与一般的并查集不同,带权并查集除了保存节点之间的链接关系之外,还有。,所以调用find()函数(查找)后,父节点就变为根节点了,带权并查集本质就是并查集,该合并的还是要合并,只不过还要。(2)用于判断无向图内的每个连通块的节点数量。(1)用于简单地合并和查询上级关系。用这些权值表示集合中各点的对应关系。对于size数组,只需要保证。并查集是一种树形数据结构。(2)并查集维护无向图。

2023-01-06 14:55:05 72

原创 Trie树(字典树)总结

01Trie树是用于解决二进制问题,一般用于维护。,我现在根本不会,所以等以后再把它搞懂qwq。(1)用于存储、插入(更新)、查询字符串。(2)用于解决前缀问题。该串是否为别的串的子串。(3)解决二进制问题。

2023-01-05 21:36:52 85

原创 贪心算法总结

(1)贪心问题的区间问题通常是要按照区间的一端来进行排序,这样做是因为我们排好序后一般都要遍历一遍整个数组,按照端点的一端排序能让。(2)至于选择哪一个端点排序,我认为都应该是可行的(其实是我瞎猜的)(3)区间问题通常需要我们去。

2023-01-04 15:39:45 79

原创 前缀和差分总结

二维前缀和和差分其实本质是面积公式和容斥原理,其中求面积时因为每个点之间是离散的,所以会有在边界时+1和-1的问题102. 最佳牛围栏(已做笔记)100. 增减序列(已做笔记)99. 激光炸弹(已做笔记)101. 最高的牛(已做笔记)464. 推销员(这个题还没有弄懂)

2023-01-03 17:16:40 70

原创 双指针算法总结

(3)最后证明如果题目存在一种解,是否可以通过我们设计的双指针算法找到这种解。在一个指针(我们枚举的那一个)往一侧移动时,另外个指针也只能单向移动。(1)先确定我们要枚举哪一个指针。(2)一个数列里面的多个区间。,然后让另一个指针跟随着移动。(2)判断是否具有单调性。(1)两个数列的区间。

2023-01-03 11:23:00 90

原创 二分算法总结

(2)判断我们二分的mid在check()之后如果在我们要的状态的那一侧,那么就应该让区间那一侧的端点往另外一侧移。对于二分答案,我个人的理解是:首先自己要开一个足够大的区间(答案的数值就在这个区间里),然后判断。下面给出两道题:(这两道题除了涉及二分答案,还有很多其他的做题细节,值得一看)mid在右侧的状态区间的话就往左移,在左侧的状态区间的话就往右移。(1)先假设我们要找的分界点,并确定我们要的性质(状态)这样的字眼,那么这些条件就可能是我们要判断的条件。区分这两侧的分界点就是我们要二分查找的点。

2023-01-03 00:25:28 186

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除