![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
文章平均质量分 94
小崔的技术博客
写出来才算
展开
-
C++ STL常用库的使用方法(下)
C++ STL常用库的使用方法(下)原创 2023-03-12 20:19:23 · 135 阅读 · 0 评论 -
C++ STL常用库的使用方法(一)
C++ STL 常用库的使用方法原创 2023-03-12 18:42:22 · 539 阅读 · 0 评论 -
Dp-最长上升子序列模板
例题:怪盗基德的滑翔翼怪盗基德是一个充满传奇色彩的怪盗,专门以珠宝为目标的超级盗窃犯。而他最为突出的地方,就是他每次都能逃脱中村警部的重重围堵,而这也很大程度上是多亏了他随身携带的便于操作的滑翔翼。有一天,怪盗基德像往常一样偷走了一颗珍贵的钻石,不料却被柯南小朋友识破了伪装,而他的滑翔翼的动力装置也被柯南踢出的足球破坏了。不得已,怪盗基德只能操作受损的滑翔翼逃脱。假设城市中一...原创 2020-02-21 07:23:37 · 395 阅读 · 0 评论 -
Dp-01背包模型(数字组合)
数字组合给定N个正整数A1,A2,…,ANA1,A2,…,AN,从中选出若干个数,使它们的和为M,求有多少种选择方案。输入格式第一行包含两个整数N和M。第二行包含N个整数,表示A1,A2,…,ANA1,A2,…,AN。输出格式包含一个整数,表示可选方案数。数据范围1≤N≤1001≤N≤100,1≤M≤100001≤M≤10000,1≤Ai≤10001≤Ai≤1...原创 2020-02-21 08:03:31 · 332 阅读 · 0 评论 -
BFS-求连通块的数目
例题:有一间长方形的房子,地上铺了红色、黑色两种颜色的正方形瓷砖。你站在其中一块黑色的瓷砖上,只能向相邻(上下左右四个方向)的黑色瓷砖移动。请写一个程序,计算你总共能够到达多少块黑色的瓷砖。分析:1.特点是把从起点出发能到达的点全部放入队列中,每个点只能入队一次,出队的时候将数目加一。就可以统计所有点连通的最大数目了。2.使用数组来模拟队列需要注意数组的大小为N*N,hh=...原创 2020-02-22 11:21:09 · 478 阅读 · 0 评论 -
算法时间复杂度的数据要求
原创 2020-06-21 10:24:34 · 199 阅读 · 0 评论 -
拓扑排序模板
拓扑排序只在有向图中有,有向无环图又称为拓扑图。拓扑排序借用的是宽搜的模型,需要定义一个存储入度的数组,代码中用的是d[]数组。第一步是将入度为零的点入队。拓扑排序思路:代码:#include <iostream>#include <cstring>#include <algorithm>using namespace s...原创 2020-02-25 22:18:26 · 280 阅读 · 0 评论 -
DP-状态机模型模板
例题:大盗阿福阿福是一名经验丰富的大盗。趁着月黑风高,阿福打算今晚洗劫一条街上的店铺。这条街上一共有NN家店铺,每家店中都有一些现金。阿福事先调查得知,只有当他同时洗劫了两家相邻的店铺时,街上的报警系统才会启动,然后警察就会蜂拥而至。作为一向谨慎作案的大盗,阿福不愿意冒着被警察追捕的风险行窃。他想知道,在不惊动警察的情况下,他今晚最多可以得到多少现金?输入格式输入的...原创 2020-02-21 08:54:25 · 335 阅读 · 0 评论 -
DFS剪枝模板-木棒
乔治拿来一组等长的木棒,将它们随机地砍断,使得每一节木棍的长度都不超过50个长度单位。然后他又想把这些木棍恢复到为裁截前的状态,但忘记了初始时有多少木棒以及木棒的初始长度。请你设计一个程序,帮助乔治计算木棒的可能最小长度。每一节木棍的长度都用大于零的整数表示。思路:1.木棒的长度一定能被总长度整除2.木棒的长度一定大于任何一根木棍的长度(枚举的时候可以从木棍最长长度开始)...原创 2020-02-26 10:22:56 · 289 阅读 · 0 评论 -
并查集模板
并查集的应用:1.以树作为节点的组织结构,结构的形态很是否采取优化策略有很大关系,未进行优化的树结构可能会是“畸形”树(严重不平衡,头重脚轻,退化成链表等),按尺寸(正规说法叫做秩,后文全部用秩来表示)进行平衡,同时辅以路径压缩后,树结构会高度扁平化。2.虽然组织结构比较复杂,数据表示方式却十分简洁,主要采用数组作为其底层数据结构。一般会使用两个数组(parent-link array an...原创 2020-02-20 15:00:07 · 80 阅读 · 0 评论 -
简单的递归和递推
简单的递归和递推1.递归实现指数型枚举题意:从 1~n 这 n 个整数中随机选取任意多个,输出所有可能的选择方案。要求同一行内的数必须升序排列。思路:每个数有俩种情况,选中和不选中。由于要升序排列,递归可以实现,不管选与不选都是从小到大排列的。并且选与不选没有顺序之分。代码:#include <iostream>#include <algorithm>u...原创 2020-03-15 18:30:12 · 246 阅读 · 0 评论 -
树形DP模板-树的直径
题目描述:树的最长路径:给定一棵树有n个顶点,n-1条边,每条边有一个权值,可以为负数,求数的最长路径。该图是一个无向图。思路:一般树的直径(无权值)的求法:通用的求法,用树形DP来解:随便取一个点作为跟节点,通常去一号点。然后dfs,每次从子节点中找最长的边和次长的边。得到最长路径,为了避免像上循环找,传入一个父节点。代码:#include <...原创 2020-03-01 11:34:32 · 383 阅读 · 0 评论 -
逆序对的数量
逆序对的数量题意:给定一个长度为n的整数数列,请你计算数列中的逆序对的数量。逆序对的定义如下:对于数列的第 i 个和第 j 个元素,如果满足 i < j 且 a[i] > a[j],则其为一个逆序对;否则不是。思路:1.二分,可以将数组分成三种情况,俩个数全部在左边的,俩个数全部在右边的和一个在左,一个在右的。2.左边的和右边的都可以归并求出。3.一个左一个右的会有mid...原创 2020-03-26 21:09:59 · 148 阅读 · 0 评论 -
背包问题-01背包模板
例题:采药辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师。为此,他想拜附近最有威望的医师为师。医师为了判断他的资质,给他出了一个难题。医师把他带到一个到处都是草药的山洞里对他说:“孩子,这个山洞里有一些不同的草药,采每一株都需要一些时间,每一株也有它自身的价值。我会给你一段时间,在这段时间里,你可以采到一些草药。如果你是一个聪明的孩子,你应该可以让采到的草药的总价值最大...原创 2020-02-21 07:30:58 · 158 阅读 · 0 评论 -
X的因子链(数论模板)
题目:输入正整数X,求X的大于1的因子组成的满足任意前一项都能整除后一项的严格递增序列的最大长度,以及满足最大长度的序列的个数。 分析:要求求最大长度是分解因子后的质因子个数和。和满足长度的序列个数(排列问题)。 代码:#include <iostream>#include <algorithm&g...原创 2020-02-22 08:45:21 · 416 阅读 · 0 评论 -
状态压缩模板-骑士
在n×n的棋盘上放k个国王,国王可攻击相邻的8个格子,求使它们无法互相攻击的方案总数。输入格式共一行,包含两个整数n和k。输出格式共一行,表示方案总数,若不能够放置则输出0。数据范围1≤n≤101≤n≤10,0≤k≤n20≤k≤n2输入样例:3 2输出样例:16思路:我们可以发现第i行的状态只与它的前一行的状态有关,因此是一道...原创 2020-03-01 09:47:25 · 305 阅读 · 1 评论 -
数位DP模板-数字游戏
题意:某人命名了一种不降数,这种数字必须满足从左到右各位数字呈非下降关系,如123,446。现在大家决定玩一个游戏,指定一个整数闭区间[a,b],问这个区间内有多少个不降数。数据范围:1≤a≤b≤231−1分析:由于数据范围特别大,用暴力枚举肯定会超时,所以就得用dp。状态表示为:所有最高位为J,且一共有i位的不降速的集合。根据最高位的后一位来划分集合,最高位的下...原创 2020-03-02 11:36:47 · 222 阅读 · 0 评论 -
树形Dp-树的中心
题目:给定一棵树,树中包含n个结点(编号1~n)和n−1条无向边,每条边都有一个权值。请你在树中找到一个点,使得该点到树中其他结点的最远距离最近。思路:代码:#include <iostream>#include <cstring>#include <algorithm>using namespace std;co...原创 2020-03-01 19:56:26 · 242 阅读 · 0 评论 -
DFS模板-小猫爬山
题目描述:N只小猫,要坐缆车下山,每辆缆车最多能承重W。每只小猫的重量为c[i],问最少需要多少量缆车?分析:看上去像一个背包问题,但是数据量很小,可以用深度优先遍历来做。DFS需要考虑顺序问题,每只小猫有俩种情况,在已有的车子中选,新开一辆缆车。优化:为了让树的分支过多,可以优先让种的小猫先选,因为它们的选择更少。代码:#include <iostream...原创 2020-02-25 23:11:44 · 149 阅读 · 0 评论 -
PAT树
树–》图的存储 (邻接表,邻接矩阵)图的遍历方式:DFS,BFS第一题:数叶子节点求每一层叶子节点个数?存储在cnt[N]中用邻接表存储:dfs(u,depth){ if(h[u]==-1) { cnt[depth]++; max_depth=max(max_depth,depth); return ; } ...原创 2020-04-27 11:39:28 · 402 阅读 · 0 评论 -
最短路-Dijstra算法和spfa算法模板
一:Dijstra模板给定一个n个点m条边的有向图,图中可能存在重边和自环,所有边权均为正值。请你求出1号点到n号点的最短距离,如果无法从1号点走到n号点,则输出-1。输入格式第一行包含整数n和m。接下来m行每行包含三个整数x,y,z,表示存在一条从点x到点y的有向边,边长为z。输出格式输出一个整数,表示1号点到n号点的最短距离。如果路径不存在,则输出-1。数据...原创 2020-02-21 09:39:45 · 207 阅读 · 1 评论 -
最长公共子序列(DP)
最佳色彩带:修剪方案可能并不唯一,例如给定颜色为{2 2 4 1 5 5 6 3 1 1 5 6}的色带,如果伊娃最喜欢的颜色以她最喜欢的顺序排列为{2 3 1 5 6},则她有44种可能的最佳解决方案{2 2 1 1 1 5 6},{2 2 1 5 5 5 6},{2 2 1 5 5 6 6},{2 2 3 1 1 5 6}。代码:#include <iostream>#include <algorithm>using namespace st...原创 2020-05-30 10:16:20 · 124 阅读 · 0 评论 -
日期问题
日期问题题意小明正在整理一批历史文献。这些历史文献中出现了很多日期。小明知道这些日期都在1960年1月1日至2059年12月31日。令小明头疼的是,这些日期采用的格式非常不统一,有采用年/月/日的,有采用月/日/年的,还有采用日/月/年的。更加麻烦的是,年份也都省略了前两位,使得文献上的一个日期,存在很多可能的日期与其对应。比如02/03/04,可能是2002年03月04日、2004年...原创 2020-03-24 23:20:59 · 132 阅读 · 0 评论 -
AcWing1224-交换瓶子
题:有N个瓶子,编号1∼N,放在架子上。比如有5个瓶子:2 1 3 5 4要求每次拿起2个瓶子,交换它们的位置。经过若干次后,使得瓶子的序号为:1 2 3 4 5对于这么简单的情况,显然,至少需要交换2次就可以复位。如果瓶子更多呢?你可以通过编程来解决。解析:本题思路比较精巧,需要用图论来求解。将每个瓶子向它应该在的位置的瓶子连...原创 2020-02-22 12:02:58 · 177 阅读 · 0 评论 -
数字转换(dp+数论)
题意:如果一个数x的约数之和y(不包括他本身)比他本身小,那么x可以变成y,y也可以变成x。例如,4可以变为3,1可以变为7。限定所有数字变换在不超过n的正整数范围内进行,求不断进行数字变换且不出现重复数字的最多变换步数。思路:可以将每个数与能到达的数之间连一条边,这样就会形成一个森林,而题目要求的就是在森林中找一棵树的最大直径。问题转换为求树的...原创 2020-03-01 22:40:55 · 495 阅读 · 0 评论 -
匈牙利算法-求二分图最大匹配的模板
例题:给定一个二分图,其中左半部包含n1n1个点(编号1~n1n1),右半部包含n2n2个点(编号1~n2n2),二分图共包含m条边。数据保证任意一条边的两个端点都不可能在同一部分中。请你求出二分图的最大匹配数。二分图的匹配:给定一个二分图G,在G的一个子图M中,M的边集{E}中的任意两条边都不依附于同一个顶点,则称M是一个匹配。二分图的最大匹配:所有匹配中包含边数最多的一组...原创 2020-02-20 15:37:49 · 122 阅读 · 0 评论 -
状态压缩Dp模板-玉米田
农夫约翰的土地由M*N个小方格组成,现在他要在土地里种植玉米。非常遗憾,部分土地是不育的,无法种植。而且,相邻的土地不能同时种植玉米,也就是说种植玉米的所有方格之间都不会有公共边缘。现在给定土地的大小,请你求出共有多少种种植方法。土地上什么都不种也算一种方法。输入格式第1行包含两个整数M和N。第2..M+1行:每行包含N个整数0或1,用来描述整个土地的状况,1表示该块土...原创 2020-03-01 10:34:55 · 280 阅读 · 0 评论 -
DP-动态三角形模板-摘花生
1.摘花生Hello Kitty想摘点花生送给她喜欢的米老鼠。她来到一片有网格状道路的矩形花生地(如下图),从西北角进去,东南角出来。地里每个道路的交叉点上都有种着一株花生苗,上面有若干颗花生,经过一株花生苗就能摘走该它上面所有的花生。Hello Kitty只能向东或向南走,不能向西或向北走。问Hello Kitty最多能够摘到多少颗花生。输入格式第一行是一个整数T...原创 2020-02-20 18:13:38 · 131 阅读 · 0 评论 -
小朋友排队
小朋友排队题目:n 个小朋友站成一排。现在要把他们按身高从低到高的顺序排列,但是每次只能交换位置相邻的两个小朋友。每个小朋友都有一个不高兴的程度。开始的时候,所有小朋友的不高兴程度都是 0。如果某个小朋友第一次被要求交换,则他的不高兴程度增加 1,如果第二次要求他交换,则他的不高兴程度增加 2(即不高兴程度为 3),依次类推。当要求某个小朋友第 k 次交换时,他的不高兴程度增加 k。...原创 2020-03-26 21:01:55 · 288 阅读 · 0 评论 -
航班时间(时间和字符串处理)
航班时间题意:小 h 的女朋友去中东交换。小 h 并不知道中东与北京的时差。但是小 h 得到了女朋友来回航班的起降时间。小 h 想知道女朋友的航班飞行时间是多少。对于一个可能跨时区的航班,给定来回程的起降时间。假设飞机来回飞行时间相同,求飞机的飞行时间。起降时间的格式如下:h1:m1:s1 h2:m2:s2h1:m1:s1 h3:m3:s3 (+1)h1:m1:s1 h4:...原创 2020-03-25 07:41:34 · 368 阅读 · 0 评论 -
bfs-最短路问题
bfs:宽度优先搜索,一层层的搜索,每次移动的距离是一,所以可以用来解决边长为一的最短路问题。例题:迷宫用一个R×C 的字符矩阵来表示。字符 S 表示阿尔吉侬所在的位置,字符 E 表示奶酪所在的位置,字符 # 表示墙壁,字符 . 表示可以通行。阿尔吉侬在 1 个单位时间内可以从当前的位置走到它上下左右四个方向上的任意一个位置,但不能走出地图边界。对于每一组数据,输出阿尔吉侬吃...原创 2020-02-22 11:08:36 · 594 阅读 · 0 评论 -
最大子序列和(DP)
题意:最大子序列是指序列内各元素之和最大的连续子序列。代码:#include <iostream>#include <algorithm>using namespace std;const int N=100010;//f[i]:表示以i结尾的最大序列和int a[N];int main(){ int n; cin>>n; int l=0,r=0; int res=-1; for(int i=1;原创 2020-05-30 09:16:42 · 356 阅读 · 0 评论 -
数字三角形总结(DP)
数字三角形以题目为基本单位:摘花生:从集合角度来考虑DP问题—闫氏思考法转态表示:转态计算:集合的划分网格图:f[i][j]线形图:f[i]背包问题:f[n][v]最低通行费:取最小值:需要注意边界了方格取数:走俩次DP和图论的关系...原创 2020-04-29 22:07:32 · 214 阅读 · 0 评论 -
数学知识三
高斯消元:高斯消元的原理:矩阵的行列变换:通过矩阵的行列变换,将矩阵变成上三角的形式判断解的情况:算法步骤:组合数:根据数据范围选择:当a,b小于10000的时候可以用递推当a,b大于>10000 且预处理:空间换时间(优化到不超时)组合数递推式:数据范围大的时候(预处理)卢卡斯定理:分解质因数的方法:求每个质数的次数:卡特兰数:最后...原创 2020-04-28 17:41:20 · 112 阅读 · 0 评论 -
匈牙利算法和染色法(二分图)
二分图:1)染色法 —>判断是否是二分图 O(n+m)2)匈牙利算法 —>求最大匹配 O(mn) 实际运用效果非常好大纲:染色法---->判断一个图是否是二分图性质:一个图是二分图《===》当且仅当图中不含奇数环染色法:如果一个图在染色的过程中,没有矛盾,就是一个二分图算法步骤:bool dfs(int u,int c){ color[u]...原创 2020-04-27 12:00:18 · 277 阅读 · 1 评论 -
最短路问题
最短路问题分类1)单源最短路2)多源最短路(不止一个起点)稠密图: 朴素版Dijstra O(n^2) 数据结构:邻接矩阵稀疏图: 堆优化版Dijstra O(mlogn) 存储结构:邻接表考察点:1)建图 :将题目抽象成最短路问题2)Dijstra:基于贪心朴素版Dijstra:算法步骤:1)初始化距离 :memset(dist,0x3f,sizeof dist)...原创 2020-04-27 11:58:45 · 294 阅读 · 0 评论 -
最小生成树
最小生成树—>无向图常见的用法1)稠密图 —> Prim算法朴素版2)稀疏图 —> Kruskal算法二分图:1)染色法 —>判断是否是二分图 O(n+m)2)匈牙利算法 —>求最大匹配 O(mn) 实际运用效果非常好3)最大流问题大纲:朴素版Prim算法 (核心:算法流程)1)初始化距离 dist[i]<–0x3f算法流程...原创 2020-04-27 11:56:37 · 444 阅读 · 0 评论 -
火车进站(出栈顺序问题)
问题:解决了一个序列进栈出栈的顺序的问题。思路:state3是一个序列state2是栈state1是出栈后的序列dfs:每一步都有俩种走法(1.进栈 2.出栈)代码:#include <iostream>#include <algorithm>#include <stack>#include <vector>using na...原创 2020-04-27 11:54:01 · 1352 阅读 · 0 评论 -
最短路问题总结
最短路问题分类1)单源最短路2)多源最短路(不止一个起点)稠密图: 朴素版Dijstra O(n^2) 数据结构:邻接矩阵稀疏图: 堆优化版Dijstra O(mlogn) 存储结构:邻接表考察点:1)建图 :将题目抽象成最短路问题2)Dijstra:基于贪心朴素版Dijstra:算法步骤:1)初始化距离 :memset(dist,0x3f,sizeof dist)...原创 2020-04-08 10:51:20 · 551 阅读 · 0 评论 -
区间贪心
贪心算法一般做法:1)区间问题 --》排序 (按左端点,按右端点)2)贪心是一种短视的作法,每次都选择当前最优解(局部最优解)第一题:区间选点,让每个区间至少包含一个点,数轴上至少可以放几个点贪心步骤:证明方法:要证明A==B 可以整A>=B 和A<=B =》 AB代码:struct Range{ int l, r; bool ope...原创 2020-04-08 10:48:55 · 121 阅读 · 0 评论