
算法整理
文章平均质量分 65
各种算法的整理
胖川怎么可能不胖
总不能辜负自己吧
展开
-
约数之和 (普通快速幂求逆元做法)
假设现在有两个自然数 A 和 B,S 是 AB的所有约数之和。请你求出 Smod9901的值是多少。原创 2023-11-03 20:44:16 · 230 阅读 · 0 评论 -
约数之和 (简单+普通)
给定 n 个正整数 ai,请你输出这些数的乘积的约数之和,答案对 109+7取模。原创 2023-11-03 17:27:31 · 480 阅读 · 0 评论 -
石子合并(区间DP)+滑雪(记忆化搜索)
设有 N 堆石子排成一排,其编号为 1,2,3,…,N。每堆石子有一定的质量,可以用一个整数来描述,现在要将这 N 堆石子合并成为一堆。每次只能合并相邻的两堆,合并的代价为这两堆石子的质量之和,合并后与这两堆石子相邻的石子将和新堆相邻,合并时由于选择的顺序不同,合并的总代价也不相同。例如有 4 堆石子分别为1 3 5 2, 我们可以先合并 1、2 堆,代价为 4,得到4 5 2, 又合并 1、2 堆,代价为 9,得到9 2,再合并得到 11,总代价为 4+9+11=24;原创 2023-07-20 11:42:33 · 216 阅读 · 0 评论 -
最长上升子序列 (从dp---->贪心)
思路:题目要求找到最长上升的子序列,那么这个时候,我们可以假以第i个为结尾,那么此时以i为结尾的最大上升子序列是多少。但是这个时候,会发现,从第i个为结尾往前面找的话,是一个一个遍历的,也就是说时间复杂度是n*n,如果数据范围很大,那么就不能用了,不过好在这题n只到1000。原创 2023-07-05 14:57:55 · 222 阅读 · 0 评论 -
基础算法杂谈111
这时发现B的入度为 0,C的入度为 0,所以删除B和B上所连的边、C和C上所连的边,结果如下图:(拓扑排序有多种可能)将队列里的点依次出队列,然后找出所有出队列这个点发出的边,删除边,同事边的另一侧的点的入度 -1。如果所有点都进过队列,则可以拓扑排序,输出所有顶点。否则输出-1,代表不可以进行拓扑排序。这时整个图被删除干净,所有能进行拓扑排序。然后将入度为 0 的点放入队列。首先记录各个点的入度。原创 2023-07-03 10:57:01 · 178 阅读 · 0 评论 -
最长****子序列
dp思想(在研读写的博客后,打算记录下自己学习过程)通过最长上升子序列的拓展了解到,其实这是一个系列的问题主要代表有:1 最长上升子序列2 最长不上升子序列3 最长下降子序列4 最长不下降子序列就以最长上升子序列为例。(注意:这里面说的子序列不连续的)得到一个数组,求这个数组的最长上升子序列长度可以直接看出来这个数组的最长上升子序列是1 2 5 6,其长度也就是4.一眼就能看出来,但是用代码该怎么实现呢?介绍俩种方法:dp思想目前为止所接触的dp思想核心就在状态转移方程上。原创 2023-03-31 20:28:34 · 448 阅读 · 2 评论 -
关于树状数组
树状数组里面运用了前缀和的思想,先看图把数字俩俩求和,这样修改数据就会减少一半的时间那既然都想到求和了,那么为什么不多求几次和呢?这样的话,即使计算几百万个数的和,也只要计算十几二十次,大大减少了TLE的可能性但是不难发现,其实这个表格当中是由好多的数据是不用的比如5:那么就将这些用不到的数字都删除掉,几乎所有层的第偶数个数字都是没用的,那么删掉之后就会得到如下情况这么一来将他们平移上去刚好是n个数据 ,放到一个数组里面,那就是树状数组了。原创 2023-03-13 20:40:14 · 359 阅读 · 3 评论 -
关于最短路这个算法
但是会出现稠密图和稀疏图的情况,所以如果像最小生成树那样用二维数组存的话,可能会出现存不下的问题,因此,就不得不先学会邻接表或者链式向前星。我这俩个都学的很迷糊,所以就是 记的板子,让我讲为什么会这样,还是有困难的,就直接挂上讲的还不错的链接了。dijk算法能解决大部分最短路的问题,但是缺点 就是不能判负环,所以另外俩个算法就是用来判负环的。由于朴素的dij算法只能解决一些朴素的问题,当遇到那种复杂的要优化的题目,就会出现超时的情况所以,就直接展示优先队列优化的算法,这相当于是个板子题目(原创 2023-03-06 15:15:29 · 180 阅读 · 0 评论 -
关于最小生成树这个算法
kruskal算法用到了结构体排序和并查集,而prim算法用的更类似于最短路的算法(实时更新)最小生成树,就只有俩个算法(kruskal和prim算法)我个人更喜欢用kruskal算法。原创 2023-03-02 10:23:52 · 244 阅读 · 1 评论 -
关于dp背包的那些事
最简单的背包dp就让我很头疼了学的时候。东问西问,才渐渐知道,dp的核心就是动态转化方程,只要能把动态转化方程推导出来,那就是极好的。那么背包的dp,概括来说,就是背包有多少个容量,该如何在当前容量下将能装的利益最大化。这是要考虑的事情,这就是明面上的dp。粗略的说可能不怎么好理解,还是看题细说吧该题是板子中的板子了。为什么俩个for循环里面的第二个循环要从大到小去循环,因为要保证变化之前是没有算过的。位置。原创 2023-03-02 09:36:29 · 187 阅读 · 0 评论 -
关于DFS和BFS这个算法
广度优先算法(Breadth-First-Search),简称BFS。从知识点看属于图结构的搜索算法,是一种相对容易理解的简单算法。BFS算法从问题的初始状态(起点)出发,根据状态转换规则(图结构中的边),遍历所有可能的状态(其他节点),直到找到终结状态(终点)。因此BFS算法的复杂度和状态集合的总数密切相关。BFS算法虽然出自图结构,但其常用的领域却不是解决图论相关问题。原创 2023-02-28 13:54:36 · 420 阅读 · 0 评论