ACM入门基础算法知识
文章平均质量分 58
内容包括:辗转相除法,快速幂,贪心思想,DP思想,DFS,BFS
WQhuanm
获奖项:2023天梯赛三等奖
展开
-
高精度算法
决定了加,减,乘从低位运算到高位除从高位到低位。原创 2022-11-16 22:07:53 · 89 阅读 · 0 评论 -
前缀和与差分
前缀和可以简单理解为数列前n项和(多维一个道理)以二维前缀和为例子:sum[i][j]=sum[i-1][j]+sum[i][j-1]+sum[i-1][j-1]+a[i][j](a[i][j]为这个格子的数值)(+sum[i-1][j-1]是因为减了这个重复的)原创 2022-11-04 10:45:01 · 82 阅读 · 0 评论 -
广度优先搜索(BFS)
bfs旨在面临一个路口时,把所有的岔路口都记下来,然后选择其中一个进入,然后将它的分路情况记录下来,然后再返回来进入另外一个岔路,并重复这样的操作,具有盲目性。因此其算法复杂度与集合总数密切相关,一般BFS算法常用于求最短的步数或者求扩散性质的区域问题。(求最长什么的(去盲目搜索,可能会爆TLE或者MLE)原创 2022-10-30 11:56:29 · 1355 阅读 · 0 评论 -
最短路径三大算法——2,迪杰斯特拉算法dijkstra (复杂度O(n^2))
我们每次都求每个更新后的点中到达起点最近的点,一直到终点,这样我们最后得到的就是终点到起点最近。原创 2022-10-28 21:06:33 · 2370 阅读 · 0 评论 -
最短路径三大算法——1,弗洛伊德算法floyd(复杂度O(n^3))
目前已经更新:当然,最短路径有通用的bfs,dfs大神,但是我们这里特别介绍floyd,dijkstra还有spfa,本系列分为三篇。原创 2022-10-28 19:48:19 · 3525 阅读 · 0 评论 -
并查集(究竟有几个祖先?)
我们先建立一个数组,fa[x],即fa[x]是x的爸爸,(祖先的爸爸是自己,fa[x]=x),然后一个递归函数,find(x),找x祖先,只要fa[x]!=x,(说明fa[x]只是个爸爸,但不是祖先,他也是某人的儿子)我们就一直递归,直到找到祖先。能找到祖先,剩下就很简单了,写一个unit函数,把a,b的祖先合一起(即fa[find(a)]=find(b),我们让本来是祖先的find(a)有了爸爸,即fa[find(a)]不再等于自己了,他的爸爸变成find(b)(b的祖先)原创 2022-10-28 12:16:42 · 160 阅读 · 0 评论 -
背包问题_(DP经典),三,(完全背包)
背包系列已更新。原创 2022-10-28 11:14:08 · 144 阅读 · 0 评论 -
背包问题_(DP经典),二(多重背包)
背包系列已更新多重背包有俩种,一种是每种物品有k个,一种是多种物品分成k组,每组只能取一种。原创 2022-10-27 18:06:52 · 262 阅读 · 0 评论 -
背包问题_(DP经典),一,(01背包,填满背包)
背包系列已更新。原创 2022-10-26 23:09:51 · 383 阅读 · 0 评论 -
素数判定(埃筛,欧拉筛)
1,首先,一个合数必定可由其平方根相乘得到,或者一个大于,一个小于平方根的数得到,利用这个思想,只需考虑是否可以除去平方根一边的数,可以则另一半绝对可以2,其次,可以被除,那就是合数,不是素数3,可以证明,在6*n相邻左右边的首先都是奇数,所以有可能是素数,而不是相邻绝对不是素数,因为6*n+(-)2==2*(3*n+(-)1),或者6*n+(-)3==2*(3*n+(-)1),4也是同理。原创 2022-10-24 11:10:34 · 214 阅读 · 2 评论 -
快速幂及其二进制优化
以HDU的一道水题为例子。原创 2022-10-23 15:24:19 · 181 阅读 · 0 评论 -
辗转相除法(最大公约数)
那么求a与b的最大公约数等于求c与b(假设b比a小)的最大公约数,那我们就把a换为b,b为c,再求余数,这样不断辗转,直到b=0,(0为任意数的公约数,x%0==0),此时求出的a就是r。原创 2022-10-23 13:18:33 · 290 阅读 · 0 评论 -
丑数(HDU)固定公因子型(DP)
求出升序,那么我们只需要保证每次乘与2,3,5,7的因子后一直是最小(同时比前一项大即可)因为后面的丑数都是由前面得到,那么我们对4个因子标记是他*第几个丑数会是当前第n个丑数最小。原创 2022-10-23 10:54:59 · 392 阅读 · 2 评论