
acwing算法提高课学习记录
文章平均质量分 80
复习并记录acwing算法提高课的学习
我的鱼干呢w
这个作者很懒,什么都没留下…
展开
-
高级数据结构——树状数组
树状数组(inaryndexree,),是一种一般用来处理和操作类型的题目的数据结构,时间复杂度为O(log n)。对于普通数组来说,的时间复杂度是 O(1),但的时间复杂度是 O(n)。如果使用前缀和数组呢?区间求和的时间复杂度降低为O(1),但是单点修改又会变为O(n)。那么,我们能不能找到一种数组,中和两者的时间复杂度都不那么高?原创 2023-11-16 13:46:22 · 563 阅读 · 0 评论 -
搜索——最短路模型,多源bfs
最短路模型,即求从起点到终点的最短路径,我们可以选择dijkstra,spfa等等,在这里我们可以利用宽搜(bfs)的特性来求,因为bfs是一层一层的向外扩展的,所以当我们第一次遍历到终点时,所在的层数即为起点到终点的最短路径。多源bfs,顾名思义,多个起点的bfs,与一般的bfs不同的地方在于根据题目要求,将多个起点在初始时全部加入队列即可,后续遍历和普通bfs没什么不同。它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线。原创 2023-09-21 13:18:32 · 256 阅读 · 0 评论 -
搜索——flood fill
flood fill,即洪水泛滥,用来解决连通块问题,通过宽搜(bfs)找到某个点所在的连通块,用深搜(dfs)的话,在数据范围较大的时候可能存在爆桟的情况。农夫约翰有一片 N∗M 的矩形土地。最近,由于降雨的原因,部分土地被水淹没了。现在用一个字符矩阵来表示他的土地。每个单元格内,如果包含雨水,则用”W”表示,如果不含雨水,则用”.”表示。现在,约翰想知道他的土地中形成了多少片池塘。每组相连的积水单元格集合可以看作是一片池塘。原创 2023-09-19 13:06:58 · 151 阅读 · 0 评论 -
动态规划——状态机模型
什么是状态机模型?其实大部分dp问题都可以算是状态机,因为对于一个物品,例如01背包,无非是选与不选两种状态,这两种状态就构成了一个状态机。状态机就是一种用来描述对象或者系统在不同状态之间迁移的模型。那么状态机dp是什么?阿福是一名经验丰富的大盗。趁着月黑风高,阿福打算今晚洗劫一条街上的店铺。这条街上一共有 N 家店铺,每家店中都有一些现金。阿福事先调查得知,只有当他同时洗劫了两家相邻的店铺时,街上的报警系统才会启动,然后警察就会蜂拥而至。作为一向谨慎作案的大盗,阿福不愿意冒着被警察追捕的风险行窃。原创 2023-09-16 21:04:56 · 224 阅读 · 0 评论 -
动态规划——多重背包
多重背包是有N种物品和一个容量为V 的背包,第i种物品最多有Mi件可用,每件耗费的空间是Ci ,价值是Wi ,求解将哪些物品装入背包可使这些物品的耗费的空间 总和不超过背包容量,且价值总和最大。多重背包和01背包很像,将多重背包里的物品全部摊开就是01背包了。有 N 种物品和一个容量是 V 的背包。第 i 种物品最多有 si 件,每件体积是 vi,价值是 wi。求解将哪些物品装入背包,可使物品体积总和不超过背包容量,且价值总和最大。输出最大价值。原创 2023-09-16 13:24:27 · 136 阅读 · 0 评论 -
动态规划——完全背包
有了上一篇的学习,如果想要使物品能够被多次放入,我们只需要从小到大的去枚举背包容量即可,至于已经在上一篇阐述了,不会的可以去看看。而如果是先遍历容量的遍历顺序,在计算dp[6]时,枚举第0个硬币时会得到{5, 1},因为dp[6] += dp[6 - 1] ,而枚举第1个硬币又会得到{1, 5},所以可以发现先遍历容量得到的结果就是排列数。先看先遍历物品的遍历顺序,由于我们是按照物品的顺序来遍历的,只会先计算1,再计算5,因此得到的方法数量只有{1, 5}这种情况,即组合数。原创 2023-09-16 10:55:09 · 126 阅读 · 0 评论 -
动态规划——01背包
背包问题经典资料背包九讲,可以上网查一下相关资料。背包一共分为01背包,完全背包,多重背包,分组背包,和混合背包,下图来自代码随想录01背包是有n件物品和一个最多能背重量为w 的背包。且每件物品只能用一次,求解将哪些物品装入背包里物品价值总和最大。根据动态规划的一般步骤来解决一下并给出01背包的模板:1.确定dp数组以及下标的含义定义dp[i][j]。2.确定状态转移方程对于每个物品,只有放或者不放两种可能,所以可得出:不放:dp[i][j] = dp[i - 1][j]原创 2023-09-15 23:37:47 · 129 阅读 · 0 评论 -
动态规划——最长上升子序列模型
最长上升子序列模型类的题目,一般要求我们在一系列数中求出最长的上升或者下降(即反向的上升)子序列,一般时间复杂度为O(n^2),进一步的可以利用二分+贪心维护最长的上升子序列,时间复杂度为O(nlogn)。朴素做法一般为两层循环,第一层枚举 i 从1到n,第二层枚举 j 从1到 i ,每次枚举比较当前点 i 是否比前面的某个点 j 大,如果是则根据状态转移方程f[i] = max(f[i], f[j] + 1)更新最长上升子序列的个数或者和(将+1改为+w[i]),最后得出答案。原创 2023-09-14 13:56:56 · 87 阅读 · 0 评论 -
动态规划——数字三角形模型
首篇先了解一下什么是动态规划,动态规划(Dynamic Programming)俗称dp,是一种解决多阶段决策问题的优化方法。它通过将问题分解为多个重叠子问题,并利用子问题的解来构建原问题的解。动态规划算法通常用于具有重复子问题的优化问题。Hello Kitty想摘点花生送给她喜欢的米老鼠。她来到一片有网格状道路的矩形花生地(如下图),从西北角进去,东南角出来。地里每个道路的交叉点上都有种着一株花生苗,上面有若干颗花生,经过一株花生苗就能摘走该它上面所有的花生。原创 2023-09-12 21:24:22 · 405 阅读 · 0 评论