
做题与算法总结
文章平均质量分 81
。
karshey
平平无奇打工人。
展开
-
【LeetCode】二叉树题总结(持续更新)
【LeetCode】二叉树题总结原创 2022-09-07 16:47:34 · 298 阅读 · 0 评论 -
【算法】零基础KMP、Trie、AC自动机
KMP字符串匹配的KMP算法–前缀和后缀的详解——看这个可以理解KMP字符串匹配的KMP算法–前缀和后缀的详解——可以看到图的版本AcWing 831. KMP字符串-KMP的个人理解和解析前后缀是什么假如有一个串:abaab(下标从1开始)前缀:aababaabaa后缀:(从后往前)babaabbaab“部分匹配值”:前缀和后缀的最长共有元素的长度。所以这个串的部分匹配值是2,即next[5]=2.(5代表串的长度,即串的下标1-5)next[i]=j的含义是:模原创 2022-05-09 16:21:06 · 433 阅读 · 0 评论 -
【动态规划】区间、计数、数位统计、状态压缩、树形DP与记忆化搜索 题解与模板
是AcWing算法基础课的笔记。区间DP:AcWing 282. 石子合并AcWing 282. 石子合并 #include<bits/stdc++.h>using namespace std;typedef long long ll;#define INF 0x3f3f3f3f#define fir(i,a,n) for(int i=a;i<=n;i++)const int N=300+10;int n,a[N],s[N];int dp[N][N];int main原创 2022-04-07 15:59:38 · 1116 阅读 · 0 评论 -
【数据结构与算法】AcWing算法自学笔记总结
一总结才知道,我这么菜的原因是我学的真的太少了TAT还有一些学的时候没记笔记,现在也不知道记不记得动态规划【动态规划】背包问题总结:01、完全、多重与其二进制优化、分组背包 题解与模板【动态规划】线性dp问题总结:数字三角形、最长上升子序列、最长公共子序列、最短编辑距离 题解与模板【动态规划算法】零基础区间DP自学笔记图论【图论】最短路算法:Dijkstra、bellman-ford、spfa、Floyd 和拓扑排序【图论算法】零基础最小生成树学习与总结【图论算法】二分图:染色法与匈牙利算原创 2022-03-21 13:53:26 · 4868 阅读 · 0 评论 -
【动态规划】线性dp问题总结:数字三角形、最长上升子序列、最长公共子序列、最短编辑距离 题解与模板
是AcWing算法基础课动态规划线性dp的笔记。AcWing 898. 数字三角形题#include<bits/stdc++.h>using namespace std;#define fir(i,a,n) for(int i=a;i<=n;i++)#define mem(a,x) memset(a,x,sizeof(a));#define INF 0x3f3f3f3ftypedef long long ll;const int N=500+10;int n;int原创 2022-03-21 13:46:39 · 1199 阅读 · 0 评论 -
【动态规划】背包问题总结:01、完全、多重与其二进制优化、分组背包 题解与模板
背包问题线性dp区间dp计数类dp数位统计dp状态压缩dp树形dp记忆化搜索原创 2022-03-17 20:55:01 · 694 阅读 · 0 评论 -
【博弈论】Nim游戏:台阶、集合、拆分(AcWing)
AcWing 891. Nim游戏参考:AcWing 891. Nim游戏AcWing 891. Nim游戏题解:文字部分来自这里异或的含义公平组合游戏若一个游戏满足:由两名玩家交替行动在游戏进行的任意时刻,可以执行的合法行动与轮到哪位玩家无关不能行动的玩家判负则称该游戏为一个公平组合游戏。尼姆游戏(NIM)属于公平组合游戏,但常见的棋类游戏,比如围棋就不是公平组合游戏,因为围棋交战双方分别只能落黑子和白子,胜负判定也比较负责,不满足条件2和3。必胜状态和必败状态在解决这个问原创 2022-03-16 19:54:30 · 4921 阅读 · 0 评论 -
【图论算法】二分图:染色法与匈牙利算法
AcWing 860. 染色法判定二分图AcWing 860. 染色法判定二分图二分图二分图就是可以把所有点划分到两边集合中去,使得所有的边在两个集合外且在两个集合之间,集合内部没有边的图。二分图的性质:当且仅当图中不含有奇数环。(奇数环:环中边的数量是奇数)证明:必要性:二分图中不含有奇数环。反证法。假设有一个奇数环是二分图,设有两个集合A,B。第1、3、5…个点在A中,第2、4、6个点在B中。由于是二分图,且起点(1号点)在A中,则最后一个点一定在B中。那么点的数量一定为偶数,与假设原创 2022-03-15 21:35:26 · 785 阅读 · 0 评论 -
【图论算法】零基础最小生成树学习与总结
参考资料和引用来源数据结构–最小生成树详解AcWing 858. Prim算法求最小生成树:图解+详细代码注释(带上了保存路径)AcWing 858. Prim算法求最小生成树 的视频AcWing 859. Kruskal算法求最小生成树什么是最小生成树现在假设有一个很实际的问题:我们要在n个城市中建立一个通信网络,则连通这n个城市需要布置n-1一条通信线路,这个时候我们需要考虑如何在成本最低的情况下建立这个通信网?于是我们就可以引入连通图来解决我们遇到的问题,n个城市就是图上的n个顶点,然原创 2022-01-14 20:25:34 · 549 阅读 · 0 评论 -
【动态规划算法】零基础区间DP自学笔记
一个初学者的笔记。区间dp的两种写法迭代式&记忆化搜索迭代式://第一维循环区间长度 第二维循环左端点(范围是右端点<=n) for(int len=1;len<=n;len++) for(int L=1;L+len-1<=n;L++) R=L+len-1;//求右端点 或:来自for(int len = 1;len<=n;len++){//枚举长度 for(int j = 1;j+len<=n+1;j++){//枚举起点,end原创 2022-01-14 15:15:12 · 282 阅读 · 0 评论 -
【数据结构】线段树笔记2
【数据结构】零基础线段树笔记1参考和引用:线段树讲解 本博客主要是这个的笔记。线段树相关知识线段树的结构N的原数组,要4N的大小去存储线段树原因:看线段树讲解吧。代码相关更新当前节点 push_up是更新当前节点的操作。有两种写法:如果是维护区间最大值,则区间的最大值是max(左区间.maxn,右区间.maxn);如果是维护区间和值,则直接加和//维护区间最大值void push_up1(int root){ nodes[root].maxn=max(nodes[roo原创 2022-01-10 20:23:18 · 371 阅读 · 0 评论 -
【数据结构】零基础线段树笔记1
是自学的笔记。引用和参考:关于线段树B站视频:【数据结构】线段树(Segment Tree) 灯神讲得好!!引入假设我们现在有一个非常大的数组,我们要反复地做两个操作:求某个区间的和。O(n)修改数组中某个值。O(1)如果要做很多次,时间复杂度会很高。我们怎么想办法降低求某个区间的和的复杂度呢?我们建立一个和原数组a一样大的数组s,s是a的前缀和。如果想求[L,R]这个区间的和,只需要求S[R]-S[L-1]即可。 O(1)但是如果想要更新数组的值,又变复杂了。O(n)这两种方原创 2022-01-10 16:14:11 · 356 阅读 · 0 评论 -
【数据结构】零基础树状数组笔记
参考和引用树状数组学习笔记树状数组 数据结构详解与模板(可能是最详细的了)树状数组(简单介绍)树状数组小结AcWing 241. 楼兰图腾 的题解树状数组的作用树状数组,也叫做二叉索引树,或Fenwick树。可以高效实现两个操作:数组前缀和的查询单点更新——某个点增加/减少x(是改变多少)时间复杂度朴素算法单点修改:O(1)区间查询:O(n)使用树状数组单点修改:O(logn)区间查询:O(logn)容易求前缀和,也容易求区间和,如:已知nums=[1,2,3,4,原创 2022-01-09 21:55:54 · 445 阅读 · 0 评论 -
【图论】最短路算法:Dijkstra、bellman-ford、spfa、Floyd 和拓扑排序
是AcWing算法基础课关于基本图论算法的笔记。AcWing YYDS!朴素版Dijkstra-849. Dijkstra求最短路 I(稠密图)参考步骤:初始化,dis[1]=0,dis[n]=0x3f3f3f3f.——起点到起点的距离为0,到其他点的距离为正无穷(这里1是起点)迭代:n次迭代确定每个点到起点的最小值输出答案其中:dist[n]表示起点到点n的距离st[n]表示点n到起点的最短距离是否已经确定每次找还没有确定最短距离的点中的最短的那个进行更新:可以看这里的演示原创 2022-01-09 19:47:39 · 1058 阅读 · 0 评论 -
【算法】排序(sort排序函数和冒泡、选择、插入、快速排序)
记录目前学到的4种排序,sort函数排序,冒泡排序,选择排序,插入排序。sort函数排序1、对数组进行排序,要加函数头#include<algorithm>;或者可以直接万能头#include<bits/stdc++.h>;2、sort函数的参数,第一个是要排序的开始的地方,第二个是要排序的结尾+1的地方;如对一个a[10]全部排序,则函数为:sort(a,a+10);其中a即a[0],a+10即a[9]+1;代码如下:#include<iostream>#原创 2020-11-21 17:00:17 · 545 阅读 · 0 评论 -
【算法】高精度算法:加减乘除(全)
看的视频在这里。加法思想:用数组模拟高精度。算法核心:c[i]+=a[i]+b[i];c[i+1]=c[i]/10;c[i]=c[i]%10;注意:是c[i]+=a[i]+b[i],是累加。例题:求a+b, a、b范围都<=10^500;注意:1、将字符串转成数组模拟大数时要将字符转置,这样才方便做加法,因为数学是向右对齐做加法的,而数组是从左到右的。如:1234+789==1234+0789 对齐相加,而不是1234+7890对齐相加。故转置即向右对齐,这样进位就向左(向原创 2021-02-07 16:10:17 · 456 阅读 · 1 评论 -
【算法】动态规划DP自学笔记 入门:基本知识+经典例题
简述动态规划,是利用历史记录来避免重复计算的一种算法,是求解决策过程最优化的过程。一般用一维数组/二维数组来保存历史记录。一般动态规划有三个步骤:定义数组元素的含义,一般求什么就定义成什么找出数组元素之间的关系式,类似归纳法找出初始值例题1 青蛙跳台阶一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法?由题意知:青蛙可以从n-1的位置到n,也可以从n-2的位置到n,因此,f(n)=f(n-1)+f(n-2);初始化:由于变量最小为0,也易得:f(原创 2021-08-17 20:58:24 · 4720 阅读 · 6 评论 -
【算法】深度优先搜索DFS 入门:基本知识+经典例题
自学DFS看的视频:小甲鱼:讲原理青岛大学-王卓:讲的较为全面原创 2020-11-21 11:12:59 · 3432 阅读 · 2 评论