算法
文章平均质量分 76
记录一些学习算法过程中的好题、题解、思路、感悟
_qingche
永远保持求知欲和对知识的敬畏
展开
-
01背包问题再探
理解01背包及状态转移方程含义原创 2023-01-09 10:06:20 · 300 阅读 · 0 评论 -
搜索(flood fill)
简单来说就是求连通块问题,深搜广搜都可。原创 2022-11-16 11:15:44 · 57 阅读 · 0 评论 -
树状数组(1)
前缀和打表后查询效率是O(1),但后续若修改原数组中的值,需要更新前缀和数组,最坏情况是O(n)。树状数组的支持单点修改和区间查询,时间复杂度都是O(logn)单点修改+区间查询,裸的树状数组。原创 2022-11-14 21:39:12 · 142 阅读 · 0 评论 -
阶段学习总结--树图存储遍历+搜索
本周完成的任务如下:搜索练习题目完善树与图的存储和遍历理解与掌握树图与搜索结合的题目练习1.树与图的存储一般来说用邻接表来实现存树、图(邻接矩阵的话时间复杂度n²)(其实用vector来实现也可以,不过用数组模拟效率更高,虽然开始时会有些不适应,但理解后毕竟效率更高些)。思路是每个结点开一个单链表,存该节点的连通点。建立两个数组,分别存值和下个连通节点的下标,两个数组通过下标建立联系(无向图的话每次存边存两次有向边即可)。插入新增结点的话思路如下(这里的插入理解了好长时间,所以画了个图,原创 2022-04-27 22:40:24 · 297 阅读 · 0 评论 -
阶段学习总结——最短路、最小生成树
对于图的存储:稠密图(边多),邻接矩阵存储稀疏图(边少),邻接表存储常用最短路的算法:dijkstra单源非负边权最短路o(n²+m)bellman_ford(o(nm))、SPFA(o(nm))单源负边权最短路floyd(o³)多源最短路1.单向图求来回最短路请柬 - 洛谷题意:求起点到各个点再回到起点的最短路(单向图)。求起点到各个点的最小花费,单源最短路问题,再求各个点到起点的最小花费(因为是有向图,来回不一定连通),再求各个点到起点的最小花费时反向建图,再用一原创 2022-05-22 22:33:53 · 182 阅读 · 0 评论 -
阶段学习总结--搜索(1)
学校开始上网课,效率比平时低了很多(虽然这两者没有必然的因果关系),工作日比平时时间利用率上低了很多,基本没怎么学,到周末写博客时才发现没东西可以写。于是趁着最后一天做了几道搜索例题,对在停留在理解层面的dfs有了一定的应用能力。先说dfs中的n排列数字问题(活动 - AcWing)反复咀嚼,当遇到需要一条路走到底的情况时,用dfs十分适用,dfs的使用主要在以下几个方面:搜索结束条件,设置bool数组标记是否使用过,递归时的回溯问题(如恢复bool数组的标记)。最关键的还是对递归的理解。再说d原创 2022-03-27 21:06:42 · 273 阅读 · 0 评论 -
阶段学习总结--搜索(2)
3.292386 -- Lake Counting初读题目,与之前做过的扫雷相似,打算用深搜,标记已经数过的field防止走回头路,统计共有几个块。看过题解后,感觉新的地方有:第一次调用dfs的方式,搜完一整块区域后总数++(递归时递归八个方位)搜完一整块区域后继续遍历,直到找到下一个未搜的区域,再开始调用dfs。1979 -- Red and Black初读题目,思路:从起始点开始bfs,每遇到一个符合条件的点则sum++,并标记防止重复计数。看过题解后,由于题目需要判原创 2022-04-03 10:40:43 · 401 阅读 · 0 评论 -
阶段学习总结--搜索(3)
[USACO2.1]健康的荷斯坦奶牛 Healthy Holsteins - 洛谷给n个数,挑k个数,问有几种情况k个数和为素数。DFS试除法判断素数(数据量过大,不建议打表),bool数组避免重复选数,若选完k个:若sum为素数则ans++,并返回。从0到n开始递归,每次递归更新状态:sum,当前为第几个数,数组下标。注意递归回溯对称(标记与删除标记)求细胞数量 - 洛谷给出一个n行m列的矩阵,矩阵中连续的(上下左右)非零数看作一个块,求有多少个块bfs,开两个数组记录坐标偏移...原创 2022-04-10 19:05:39 · 191 阅读 · 0 评论 -
阶段学习总结--搜索(4)
阶段算法学习总结原创 2022-04-17 10:41:55 · 387 阅读 · 0 评论 -
阶段学习总结--stl容器
这周对stl有了更深的理解,初步学习了bfs广度优先搜索和dfs深度优先搜索。vector向量,变长数组,可以动态改变大小,每次数组长度不够时,就会申请原数组的两倍的空间,在元素个数不确定的时候可以很好的节省空间。可以模拟二维数组vector<vector<int> >,可利用下标访问每个元素,但要注意下标越界的问题,如洛谷p3613vector<vector<int> >a(n+1); if (opt == 1) { cin >>原创 2022-03-19 15:31:23 · 1065 阅读 · 0 评论 -
阶段学习总结--并查集、拓扑排序
并查集、拓扑排序阶段学习小结原创 2022-05-08 22:24:36 · 242 阅读 · 0 评论 -
阶段学习总结——动态规划(1)
动态规划(Dynamic Programming)dp,这周主要学习了背包问题、线性dp、区间dp、计数类dp、数位统计dp、状态压缩dp、树形dp、记忆化搜索。dp问题的核心在于状态表示与状态计算。一般先思考整个问题需要用几维的状态来表示,每一个状态的含义是什么,再考虑如何将每一步的状态计算出来。状态表示,如二维状态f(i,j),需要理解它表示的集合是什么(每一个状态都用一个集合表示,如在背包问题中表示的是所有的选法,只从前i个物品中选,且总体积.........原创 2022-06-05 20:11:31 · 116 阅读 · 0 评论 -
阶段学习总结——动态规划(2)
由于上上周已经学完基本的背包问题和dp问题,这次总结博客就不罗列模板题和基础知识了。这两周主要是做了一下线性dp和背包题。模电考试占用了太多时间,导致题做的也不多(从头开始学的模电(一点没听)),趁周末赶紧补了几道题...最小正子段和https://www.51nod.com/Challenge/Problem.html#problemId=1065题意:找出一个子段加和为正且最小思路:求出前缀和,用结构体存,然后由小到大排序, 假设排完后是 a0,a1, a2 ,如果a0.id...原创 2022-06-19 22:43:29 · 61 阅读 · 0 评论 -
阶段学习总结——贪心
贪心,每次都选择当前看起来最优的选择(局部最优解),对于贪心问题,虽然说没有套路,但可以通过不断尝试来确定贪心做法。例如区间问题,一般来说就是排序,常见有按左端点排序、按右端点排序、双关键字排序等,之后再举一些特例,都能满足的话贪心策略应该就没什么问题了,可以尝试证明一下。而且很多贪心问题都可以转化为常见的一些贪心问题。区间问题1.区间选点给定N个闭区间[ai,bi],请你在数轴上选择尽量少的点,使得每个区间内至少包含一个选出的点。输出选择的点的最小数量。位于区间端点上的点也算作...原创 2022-05-29 17:26:00 · 77 阅读 · 0 评论 -
第二次cf比赛感悟
ab题都是数学理解题,没啥好说的,也只出了ab题,其实可以更快。教训就是每一步都要严谨,runtime error时考虑数组空间不足,或者数组越界(运行时出错),比赛的时候一直以为是时间复杂度太高,因此改程序浪费了很多时间。改动太多,思维乱了,导致b题最后提交的时候有瑕疵。心态还是不能稳住放平,仍需努力。...原创 2022-04-02 21:48:54 · 229 阅读 · 0 评论 -
阶段学习总结--学习体会
随便记录一些接触acm后思维的转变。原创 2022-05-15 21:59:22 · 350 阅读 · 0 评论