算法模板
文章平均质量分 58
carut
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
区间dp模板
区间dp模板区间dp可以分为几类分支。环形区间dp,区间dp记录方案数,区间dp和高精度结合,二维区间dp环形区间dp1068. 环形石子合并原创 2022-04-10 22:15:32 · 1270 阅读 · 0 评论 -
状压dp -- 状态压缩dp
状态压缩dp状态压缩dp 分为两种,一种是棋盘式,也叫做基于连通性,基础题是291. 蒙德里安的梦想,另一种是集合形式的,基础题目是最短Hamilton路径。连通性状压dp一般讲棋盘按照行或者列分开考虑,可以先算出单行状态下的合法状态,然后下一行的合法状态受上一行的状态影响,所以可以有关系矩阵表示f(a,b)是否合法,再进行dp的转移方程。例题AcWing 1064. 小国王AcWing 327. 玉米田AcWing 292. 炮兵阵地集合覆盖例题AcWing 524. 愤怒的小鸟Ac原创 2022-04-09 17:09:01 · 471 阅读 · 0 评论 -
最短路算法 dijkstra bellman-ford还有Floyd
最短路算法最短路算法主要有dijkstra bellman-ford还有Floyd三种dijkstra算法计算边权为正的单源最短路。同时适用于有向图和无向图bellman-ford算法floyd算法...原创 2020-02-18 15:47:27 · 341 阅读 · 0 评论 -
树状数组模板
树状数组模板基本原理基础功能 单点更新,区间查询快速求前缀和 O(log(n))修改某一个数字 O(log(n))下面图片来自acwing的课程:原始数据是A数组,用C(x)代表A[x-lowbit(x)+1,x]区间内的元素之和,然后用小矩形代替C(x)画图,C(x)覆盖范围就是他们的求和的范围, 下图中的数组可以形成一棵树,C(x)覆盖区间大小决定层高,红线代表上层可以由下层连线的部分求和得出。每一个点x都有儿子,儿子的数量是x-1的二进制组成中1的个数。例如16(10000)的儿子原创 2021-12-06 12:26:16 · 1034 阅读 · 0 评论 -
并查集模板
并查集模板用处1.合并两个集合2.查询某个节点的祖宗节点优化1.路径压缩,最坏情况 log(n)2.按照秩合并,最坏log(n)使用上面的两个优化后,时间复杂度O(alpha(n))扩展1.记录集合大小集合大小绑定在根节点上,在合并的时候更新2.每个点到根节点的距离这个属性放在吗每个点上,例题:食物链(带权并查集(维护相对距离),扩展域并查集(枚举所有可能性))3.链表染色模板在这里插入代码片例题AcWing 1250. 格子游戏 : 并查集的应用之一,并查集判环..原创 2021-12-02 16:35:43 · 317 阅读 · 0 评论 -
动态规划 背包问题 模板
背包九讲模板(部分)背包九讲pdf资源pdf下载题目题目链接第1-10题01背包 cin>>n>>m; for(int i=0;i<n;++i){ cin>>v>>w; for(int j=m;j>=v;--j){ f[j]=max(f[j],f[j-v]+w); } }完全背包 cin>>n>>m; fo原创 2021-11-08 16:56:47 · 255 阅读 · 0 评论 -
多重背包模板
多重背包#include<iostream>#include<cstdio>using namespace std;const int maxn=2010;int n,m;int dp[maxn];int main(void){ cin>>n>>m; int v,w,s; for(int i=0;i<n;++i){ cin>>v>>w>>s; i原创 2020-12-22 20:59:35 · 172 阅读 · 0 评论 -
一般哈希 字符串哈希 hash
一般哈希来源: https://www.acwing.com/blog/content/404/拉链法拉链法,类似 图的邻接链表存储,对于一个对象x,算出对应的hash值k,将x存储在h[k]链表中(1) 拉链法 int h[N], e[N], ne[N], idx; // 向哈希表中插入一个数 void insert(int x) { int k = (x % N + N) % N; e[idx] = x; ne[i原创 2020-12-11 21:55:17 · 611 阅读 · 0 评论 -
Trie树模板
Trie树是一种字符串集合组成的树状结构,可以与KMP结合,形成AC自动机原创 2020-12-10 13:10:46 · 159 阅读 · 0 评论 -
KMP字符串 模板
KMP参考:https://www.acwing.com/solution/content/2286/对于S中是否含有子串p这个问题, S,p起始都是1,不是0暴力 的算法同时引入了next数组简化计算,就是在对比时,如果对比失败,p数组不再是每次前进1格,而是跳跃性的前进,这其中利用了next数组的先验信息所以每次匹配失败或者完全匹配,p的起始位置不是加1,而是跳跃性的变化,具体参考 j=next[j]next数组next数组用来存模式串中每个前缀最长的能匹配前缀子串的结尾字符的下标。 ne原创 2020-12-09 21:56:20 · 153 阅读 · 0 评论 -
双指针 离散化 区间融合 模板
双指针for (int i = 0, j = 0; i < n; i ++ ){ while (j < i && check(i, j)) j ++ ; // 具体问题的逻辑}常见问题分类: (1) 对于一个序列,用两个指针维护一段区间 (2) 对于两个序列,维护某种次序,比如归并排序中合并两个有序序列的操作...原创 2020-12-09 11:17:45 · 177 阅读 · 0 评论 -
前缀和 差分 数组
前缀和 差分前缀和用于求解单点更新后区间的和,差分用于求解区间更新后区间内的单个元素一维前缀和将现有数组看作是数组a ,求解A的前缀和数组SS[i] = a[1] + a[2] + ... a[i]a[l] + ... + a[r] = S[r] - S[l - 1]二位前缀和S[i, j] = 第i行j列格子左上部分所有元素的和以(x1, y1)为左上角,(x2, y2)为右下角的子矩阵的和为:S[x2, y2] - S[x1 - 1, y2] - S[x2, y1 - 1] + S[原创 2020-12-09 01:31:58 · 292 阅读 · 0 评论 -
最大公约数(GCD)的计算方法和代码 欧几里得算法和扩展欧几里得算法
最大公约数求两个数字间a,b的最大公约数gcd(a,b)和最小公倍数lcm(a,b),是很常见的数字计算问题,求除了最大公约数,自然就求除了最小公倍数,求解最大公约数有以下几种方法lcm(a,b)=a/gcd(a,b)∗blcm(a,b)=a/gcd(a,b)*blcm(a,b)=a/gcd(a,b)∗b 小心计算a*b时溢出,所以先除后乘质因数分解法通过分解质因数得到a,b的所有质因子,...原创 2020-02-05 22:10:44 · 1620 阅读 · 0 评论 -
四则运算表达式求值 中缀转后缀然后求值 (有括号)
参考算法笔记,数据结构部分栈的内容计算中缀表达式,先转换成后缀表达式,再计算#include <iostream>#include <cstdio>#include <cmath>#include <cstring>#include <map>#include <string>#include <vector>#include <algorithm>#include <queue>原创 2020-08-03 00:19:08 · 436 阅读 · 0 评论 -
UVA - 1292 Strategic gam 匈牙利算法模板
问题https://vjudge.net/problem/UVA-1351分析这道题一开始是用树形DP来做的,后来看别人博客,发现还可用二分图最小点覆盖来做,二分图最小点覆盖等于最大匹配,使用匈牙利算法来求解https://blog.youkuaiyun.com/qq_38956769/article/details/80238896#2-k%C3%B6nig%E5%AE%9A%E7%90%86%E5%8F%8A%E5%85%B6%E8%AF%81%E6%98%8E代码...原创 2020-07-31 09:57:38 · 233 阅读 · 0 评论 -
UVA - 1452 Jump 约瑟夫环
问题https://vjudge.net/problem/UVA-1452分析约瑟夫环的变种,我对于约瑟夫环的理解还是不够,理解了约瑟夫环是一个递归问题,f[1]=0,f[i]=f[i-1]+k mod i是每次重新编号,从结果往开始递归的结果后就解决问题了参见 https://baike.baidu.com/item/约瑟夫问题/3857719?fromtitle=约瑟夫环&fromid=348830&fr=aladdin代码#include <iostream>原创 2020-07-28 15:28:55 · 180 阅读 · 0 评论 -
线性筛法
埃氏筛有重复筛取的问题,所以时间复杂度是O(nlglgn),可以使用线性筛加快速度,每个合数只标记一次参考:https://blog.youkuaiyun.com/sodacoco/article/details/81519269https://blog.youkuaiyun.com/qq_41653433/article/details/88976544https://blog.youkuaiyun.com/qq_4051...原创 2020-02-16 15:26:00 · 195 阅读 · 0 评论 -
Floyd判圈算法
参考:https://blog.youkuaiyun.com/u012534831/article/details/74231581https://www.jianshu.com/p/36a89d938440判断链表中是否有环:大概就是说两个指针首先都指向链表的首部,然后一个每次走一步,一个每次走两步,如果有环,那么慢的肯定能够追上快的,否则快的就会先到达终点。求环的长度:两个指针重合时,快的停止,慢的...原创 2020-03-06 13:39:04 · 241 阅读 · 0 评论 -
模板函数 比较字典序
字典序比较的模板函数可以直接使用下面的模板比较两个序列的字典序template<class T>bool lexicographicallySmaller(vector<T> a,vector<T> b){ int n=a.size(); int m=b.size(); for(int i=0;i<n && i<m;++i...原创 2020-03-01 13:42:14 · 189 阅读 · 0 评论 -
fleury算法模板
fleury算法参考:https://segmentfault.com/a/1190000000587355https://blog.youkuaiyun.com/u011466175/article/details/18861415就是不断遍历欧拉回路的一部分,一旦到了尽头就放入栈中,最后将他们拼接起来//建图,找到euler回路vector<int> G[maxn];vector...原创 2020-02-23 22:04:03 · 287 阅读 · 0 评论 -
dijkstra算法模板
struct Edge{ int from,to,dist; Edge(int from,int to,int dist):from(from),to(to),dist(dist){}};struct Node{ int d,u; Node(int d=0,int u=0):d(d),u(u) {} bool operator < (const ...原创 2020-02-22 14:10:44 · 426 阅读 · 0 评论 -
最小费用最大流模板
struct MCMF{ int n,m; vector<Edge> edges; vector<int> G[maxn]; int a[maxn]; int p[maxn]; int d[maxn]; int inq[maxn]; void init(int n){ this->n=n...原创 2020-02-21 23:25:56 · 156 阅读 · 0 评论 -
Dinic算法模板 EdmondsKarp模板
EdmondsKarp模板struct Edge{ int from,to,cap,flow; Edge(int u,int v,int c,int f):from(u),to(v),cap(c),flow(f){}};struct EdmondsKarp{ int n,m; vector<Edge> edges; vector<i...原创 2020-02-20 23:53:36 · 175 阅读 · 0 评论
分享