
算法基础
balabala
4triumph
这个作者很懒,什么都没留下…
展开
-
计数问题(动态规划 + 数位dp )
给定两个整数 a 和 b,求 a 和 b 之间的所有数字中 0∼9 的出现次数。每个结果包含十个用空格隔开的数字,第一个数字表示。每组测试数据占一行,包含两个整数 a 和 b。y总课上的这个思路弄明白了那就差不多能理解了。每组数据输出一个结果,每个结果占一行。时,表示输入终止,且该行不作处理。出现的次数,第二个数字表示。出现的次数,以此类推。输入包含多组测试数据。...原创 2022-08-03 16:37:34 · 131 阅读 · 0 评论 -
最短Hamilton路径( 二进制 + 状态压缩dp)
给定一张 n 个点的带权无向图,点从 0∼n−1 标号,求起点 0 到终点 n−1 的最短 Hamilton 路径。Hamilton 路径的定义是从 0 到 n−1 不重不漏地经过每个点恰好一次。输入格式第一行输入整数 n。接下来 n 行每行 n 个整数,其中第 i 行第 j 个整数表示点 i 到 j 的距离(记为 a[i,j])。对于任意的 x,y,z,数据保证 a[x,x]=0,a[x,y]=a[y,x] 并且 a[x,y]+a[y,z]≥a[x,z]。输出格式。......原创 2022-08-02 19:24:01 · 121 阅读 · 0 评论 -
蒙德里安的梦想( 动态规划 + 状态压缩dp )
例如当N=2,M=4时,共有5种方案。当N=2,M=3时,共有3种方案。求把N×M的棋盘分割成若干个1×2的长方形,有多少种方案。当输入用例N=0,M=0时,表示输入终止,且该用例无需处理。每组测试用例占一行,包含两个整数N和M。这个解析写的好清楚啊!每个测试用例输出一个结果,每个结果占一行。输入包含多组测试用例。......原创 2022-08-01 22:57:10 · 1272 阅读 · 1 评论 -
耍杂技的牛( 贪心 )
代码】耍杂技的牛(贪心)原创 2022-07-30 22:55:59 · 107 阅读 · 0 评论 -
货仓选址( 排序 + 快速选择算法 + 贪心 + 绝对值不等式 )
代码】货仓选址(排序+快速选择算法+贪心+绝对值不等式)原创 2022-07-29 21:51:06 · 190 阅读 · 0 评论 -
排队打水( 贪心 + 排列不等式 )
代码】排队打水(贪心+排列不等式)原创 2022-07-29 21:01:56 · 102 阅读 · 0 评论 -
合并果子( 贪心 + 二叉堆 + Huffman树 )
代码】合并果子(贪心+二叉堆+Huffman树)原创 2022-07-29 19:45:46 · 106 阅读 · 0 评论 -
区间覆盖( 贪心 )
代码】区间覆盖(贪心)原创 2022-07-29 19:43:42 · 78 阅读 · 0 评论 -
区间分组( 贪心 )
top()是当前优先队列的最小值。原创 2022-07-29 12:23:39 · 192 阅读 · 0 评论 -
区间选点 + 最大不相交区间数量( 贪心 )
代码】区间选点(贪心)原创 2022-07-28 22:37:34 · 336 阅读 · 0 评论 -
滑雪( 动态规划吗 + 记忆化搜索 )
现在给定你一个二维矩阵表示滑雪场各区域的高度,请你找出在该滑雪场中能够完成的最长滑雪轨迹,并输出其长度(可经过最大区域数)。一个人从滑雪场中的某个区域内出发,每次可以向上下左右任意一个方向滑动一个单位距离。当然,一个人能够滑动到某相邻区域的前提是该区域的高度低于自己目前所在区域的高度。矩阵中第i行第j列的点表示滑雪场的第i行第j列区域的高度。给定一个R行C列的矩阵,表示一个矩形网格滑雪场。在给定矩阵中,一条可行的滑行轨迹为24−17−2−1。0≤矩阵中整数≤10000。...原创 2022-07-28 19:41:41 · 110 阅读 · 0 评论 -
没有上司的舞会( 动态规划 + 树形dp )
在满足这个条件的前提下,主办方希望邀请一部分职员参会,使得所有参会职员的快乐指数总和最大,求这个最大值。接下来N−1行,每行输入一对整数L,K,表示K是L的直接上司。现在要召开一场周年庆宴会,不过,没有职员愿意和直接上司一起参会。他们的关系就像一棵以校长为根的树,父节点就是子节点的直接上司。每个职员有一个快乐指数,用整数Hi给出,其中1≤i≤N。接下来N行,第i行表示i号职员的快乐指数Hi。Ural大学有N名职员,编号为1∼N。输出最大的快乐指数。...原创 2022-07-28 18:40:54 · 185 阅读 · 0 评论 -
整数划分( 动态规划 + 计数类dp )
一个正整数nn可以表示成若干个正整数之和,形如n=n1+n2+…+nk,其中n1≥n2≥…现在给定一个正整数n,请你求出n共有多少种不同的划分方法。由于答案可能很大,输出结果请对109+7取模。我们将这样的一种表示称为正整数n的一种划分。共一行,包含一个整数,表示总划分数量。感觉将其想为完全背包的更好理解。共一行,包含一个整数n。...原创 2022-07-28 17:26:11 · 103 阅读 · 0 评论 -
编辑距离( 线性规划 + 动态dp )
对于每次询问,请你求出给定的n个字符串中有多少个字符串可以在上限操作次数内经过操作变成询问给出的字符串。给定n个长度不超过10的字符串以及m次询问,每次询问给出一个字符串和一个操作次数上限。输出共m行,每行输出一个整数作为结果,表示一次询问中满足条件的字符串个数。再接下来m行,每行包含一个字符串和一个整数,表示一次询问。每个对字符串进行的单个字符的插入、删除或替换算作一次操作。接下来n行,每行包含一个字符串,表示给定的字符串。字符串中只包含小写字母,且长度均不超过10。...原创 2022-07-27 17:19:28 · 74 阅读 · 0 评论 -
最短编辑距离( 动态规划 + 线性dp )
ij是动态的理解ij前面的序列已匹配,ij后面还有没匹配的元素。所以它在中间是相对末位。分为对最后一个字符进行操作和对之前的字符操作,对最后一个字符进行操作又细分为增删改。现在请你求出,将A变为B至少需要进行多少次操作。第一行包含整数n,表示字符串A的长度。第三行包含整数m,表示字符串B的长度。视频下面的讲解看懂了感觉就有点悟了QUQ。第二行包含一个长度为n的字符串A。第四行包含一个长度为m的字符串B。输出一个整数,表示最少操作次数。字符串中均只包含大小写字母。......原创 2022-07-27 11:25:28 · 197 阅读 · 0 评论 -
最长上升子序列 II( 贪心 )
给定一个长度为N的数列,求数值严格单调递增的子序列的长度最长是多少。输入格式第一行包含整数N。第二行包含N个整数,表示完整序列。输出格式输出一个整数,表示最大长度。数据范围−109≤数列中的数≤1094。...原创 2022-07-26 17:24:37 · 167 阅读 · 0 评论 -
最长上升子序列( 最长上升子序列 + 线性dp + 动态规划 )
给定一个长度为N的数列,求数值严格单调递增的子序列的长度最长是多少。第二行包含N个整数,表示完整序列。输出一个整数,表示最大长度。−109≤数列中的数≤109。第一行包含整数N。原创 2022-07-26 14:56:20 · 162 阅读 · 0 评论 -
数字三角形( 动态规划 + 线性dp )
给定一个如下图所示的数字三角形,从顶部出发,在每一结点可以选择移动至其左下方的结点或移动至其右下方的结点,一直走到底层,要求找出一条路径,使路径上的数字的和最大。接下来n行,每行包含若干整数,其中第i行表示数字三角形第i层包含的整数。第一行包含整数n,表示数字三角形的层数。倒序dp不用考虑边界问题,正序dp要考虑。−10000≤三角形中的整数≤10000。输出一个整数,表示最大的路径数字和。...原创 2022-07-26 13:37:02 · 150 阅读 · 0 评论 -
分组背包问题( 背包问题 + dp )
代码】分组背包问题(背包问题+dp)原创 2022-07-25 23:12:42 · 71 阅读 · 0 评论 -
多重背包问题 II( 背包问题 + dp )
代码】多重背包问题II(背包问题+dp)原创 2022-07-25 18:42:19 · 99 阅读 · 0 评论 -
多重背包问题 I( 背包问题 + dp )
代码】多重背包问题I(背包问题+dp)原创 2022-07-24 16:19:06 · 103 阅读 · 0 评论 -
完全背包问题( 背包问题 + dp )
接下来有N行,每行两个整数vi,wi,用空格隔开,分别表示第i种物品的体积和价值。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。有N种物品和一个容量是V的背包,每种物品都有无限件可用。第一行两个整数,N,V,用空格隔开,分别表示物品种数和背包容积。第i种物品的体积是vi,价值是wi。输出一个整数,表示最大价值。...原创 2022-07-24 02:13:33 · 183 阅读 · 0 评论 -
01背包问题( 背包问题 + dp )
代码】01背包问题(背包问题+dp)原创 2022-07-22 22:31:00 · 99 阅读 · 0 评论 -
线性同余方程( 数学知识 + 同余 + 扩展欧几里得算法 )
代码】线性同余方程(数学知识+同余+扩展欧几里得算法)原创 2022-07-20 20:45:23 · 145 阅读 · 0 评论 -
扩展欧几里得算法( 数学问题 + 扩展欧几里得算法 + 裴蜀定理 )
是因为先把要输出的东西存入缓冲区,再输出,导致效率降低,而这段语句可以来打消iostream的输入和输出缓存,可节省时间,使效率能达到scanf与printf效率。然而输入输出全部用scanfprintf后更快了(但别加iossync_with_stdio(false);加了比不加慢了3ms?在做acm一些题时,经常出现数据集超大造成cin读入过多超时的情况。这是因为在c++中cin,cout虽然方便但是效率低。加入后运行时间比单用cincout少。可以增强cin和和cout的效率。...原创 2022-07-20 17:16:13 · 167 阅读 · 0 评论 -
快速幂求逆元( 数学知识 + 逆元 + 快速幂 + 费马小定理 )
代码】快速幂求逆元(数学知识+逆元+快速幂+费马小定理)原创 2022-07-20 14:13:27 · 100 阅读 · 0 评论 -
快速幂( 快速幂 + 数学知识 )
qmi函数返回值写的是int,也能ac前几次%p了,res必定小于p,而p又是int型,res虽然声明为longlong,但其实必定小于p,所以返回int和longlong值都一样。LLres=1%p和LLres=1在p=1时会有区别。a=a*(LL)a%p;转成LL,(不转过不了)防止a*a溢出。p=1,b=0的时候,第一种结果是0,第二种结果是1。...原创 2022-07-20 12:13:55 · 265 阅读 · 0 评论 -
筛法求欧拉函数( 数学知识 + 欧拉函数 + 线性筛法 )
共一行,包含一个整数,表示1∼n中每个数的欧拉函数之和。给定一个正整数nn,求1∼n中每个数的欧拉函数之和。共一行,包含一个整数n。原创 2022-07-19 22:30:32 · 72 阅读 · 0 评论 -
欧拉函数( 欧拉函数 + 数学知识 )
给定nn个正整数aiai,请你求出每个数的欧拉函数。输出共n行,每行输出一个正整数ai的欧拉函数。接下来n行,每行包含一个正整数ai。第一行包含整数n。原创 2022-07-19 19:49:35 · 133 阅读 · 0 评论 -
约数个数 + 约数之和( 数学知识 + 约数 + 试除法 + 因式分解 )
给定n个正整数ai,请你输出这些数的乘积的约数个数,答案对109+7取模。给定n个正整数ai,请你输出这些数的乘积的约数之和,答案对109+7取模。输出一个整数,表示所给正整数的乘积的约数个数,答案需对109+7取模。输出一个整数,表示所给正整数的乘积的约数之和,答案需对109+7取模。接下来n行,每行包含一个整数ai。接下来n行,每行包含一个整数ai。第一行包含整数n。第一行包含整数n。......原创 2022-07-19 17:31:17 · 249 阅读 · 0 评论 -
试除法求约数( 数学知识 + 约数 + 试除法 )
给定n个正整数ai,对于每个整数ai,请你按照从小到大的顺序输出它的所有约数。输出共n行,其中第i行输出第i个整数ai的所有约数。接下来n行,每行包含一个整数ai。第一行包含整数n。原创 2022-07-19 15:16:15 · 104 阅读 · 0 评论 -
筛质数( 数学知识 + 质数 + 线性筛法 + 筛法求素数 )
合数是指在大于1的整数中除了能被1和本身整除外,还能被其他数(0除外)的数。与之相对的是,而1既不属于质数也不属于合数。最小的合数是。其中,与是以它为基础的。素数就是质数。给定一个正整数n,请你求出1∼n中质数的个数。输入格式共一行,包含整数n。输出格式共一行,包含一个整数,表示1∼n中质数的个数。数据范围1≤n≤10684。...原创 2022-07-19 11:04:10 · 94 阅读 · 0 评论 -
分解质因数 ( 分解质因数 + 数学知识 + 试除法 )
对于每个正整数ai,按照从小到大的顺序输出其分解质因数后,每个质因数的底数和指数,每个底数和指数占一行。给定n个正整数ai,将每个数分解质因数,并按照质因数从小到大的顺序输出每个质因数的底数和指数。每个正整数的质因数全部输出完毕后,输出一个空行。接下来n行,每行包含一个正整数ai。第一行包含整数n。...原创 2022-07-18 20:26:14 · 199 阅读 · 0 评论 -
试除法判定质数( 数学知识 + 试除法 + 质数 )
1.不推荐使用sqrt()这个函数的原因是在i原创 2022-07-17 23:06:00 · 170 阅读 · 0 评论 -
食物链( 并查集 )
此人对NN个动物,用上述两种说法,一句接一句地说出K句话,这K句话有的是真的,有的是假的。以下KK行每行是三个正整数D,X,Y,两数之间用一个空格隔开,其中D表示说法的种类。动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形。每个动物都是A,B,C中的一种,但是我们并不知道它到底是哪一种。当一句话满足下列三条之一时,这句话就是假话,否则就是真话。你的任务是根据给定的N和K句话,输出假话的总数。A吃B,B吃C,C吃A。,表示X吃Y。...原创 2022-07-17 22:48:19 · 113 阅读 · 0 评论 -
二分图的最大匹配( 匈牙利算法 )
二分图的匹配给定一个二分图G,在G的一个子图M中,M的边集{E}中的任意两条边都不依附于同一个顶点,则称M是一个匹配。给定一个二分图,其中左半部包含n1个点(编号1∼n1),右半部包含n2个点(编号1∼n2),二分图共包含m条边。接下来m行,每行包含两个整数u和v,表示左半部点集中的点u和右半部点集中的点v之间存在一条边。二分图的最大匹配所有匹配中包含边数最多的一组匹配被称为二分图的最大匹配,其边数即为最大匹配数。请你求出二分图的最大匹配数。...转载 2022-07-17 03:47:59 · 169 阅读 · 0 评论 -
染色法判定二分图( 二分图判定 + 染色法 )
给定一个n个点m条边的无向图,图中可能存在重边和自环。请你判断这个图是否是二分图。输入格式第一行包含两个整数n和m。接下来m行,每行包含两个整数u和v,表示点u和点v之间存在一条边。输出格式如果给定图是二分图,则输出Yes,否则输出No。数据范围1≤n,m≤105Yes。...原创 2022-07-17 02:37:40 · 159 阅读 · 0 评论 -
Kruskal算法求最小生成树 ( Kruskal + 最小生成树 )
由V中的全部n个顶点和E中n−1条边构成的无向连通子图被称为G的一棵生成树,其中边的权值之和最小的生成树被称为无向图G的最小生成树。给定一张边带权的无向图G=(V,E),其中V表示图中点的集合,E表示图中边的集合,n=|V|,m=|E|。共一行,若存在最小生成树,则输出一个整数,表示最小生成树的树边权重之和,如果最小生成树不存在则输出。给定一个n个点m条边的无向图,图中可能存在重边和自环,边权可能为负数。求最小生成树的树边权重之和,如果最小生成树不存在则输出。...转载 2022-07-17 01:07:42 · 194 阅读 · 0 评论 -
Prim算法求最小生成树 ( Prim + 最小生成树 )
Dijkstra算法是更新到起始点的距离,Prim是更新到集合S的距离。转载 2022-07-16 23:25:23 · 471 阅读 · 0 评论 -
Floyd求最短路( Floyd + 最短路 )
再给定k个询问,每个询问包含两个整数x和y,表示查询从点x到点y的最短距离,如果路径不存在,则输出。接下来m行,每行包含三个整数x,y,z,表示存在一条从点x到点y的有向边,边长为z。接下来k行,每行包含两个整数x,y,表示询问点x到点y的最短距离。给定一个n个点m条边的有向图,图中可能存在重边和自环,边权可能为负数。共k行,每行输出一个整数,表示询问的结果,若询问两点间不存在路径,则输出。数据保证图中不存在负权回路。.........原创 2022-07-16 21:55:34 · 141 阅读 · 0 评论