----------AcWing算法基础----------
文章平均质量分 50
对于AcWing算法基础的刷题笔记
奋斗吧!骚年!
一名爱健身的软件工程本科生
展开
-
动态规划:计数问题—数位统计DP
每个结果包含十个用空格隔开的数字,第一个数字表示 0 出现的次数,第二个数字表示 1 出现的次数,以此类推。其中 0 出现 10 次,1 出现 10 次,2 出现 7 次,3 出现 3 次等等…给定两个整数 a 和 b,求 a 和 b 之间的所有数字中 0∼9 的出现次数。当读入一行为 0 0 时,表示输入终止,且该行不作处理。每组测试数据占一行,包含两个整数 a 和 b。每组数据输出一个结果,每个结果占一行。输入包含多组测试数据。...原创 2022-08-15 16:50:29 · 515 阅读 · 2 评论 -
数学知识:台阶-Nim游戏—博弈论
题目: AcWing 892. 台阶-Nim游戏现在,有一个 n 级台阶的楼梯,每级台阶上都有若干个石子,其中第 i 级台阶上有 ai 个石子(i≥1)。两位玩家轮流操作,每次操作可以从任意一级台阶上拿若干个石子放到下一级台阶中(不能不拿)。已经拿到地面上的石子不能再拿,最后无法进行操作的人视为失败。问如果两人都采用最优策略,先手是否必胜。输入格式第一行包含整数 n。第二行包含 n 个整数,其中第 i 个整数表示第 i 级台阶上的石子数 ai。输出格式如果先手方必胜,则输出 Yes。否则,输出 No。原创 2022-07-02 23:13:02 · 176 阅读 · 0 评论 -
数学知识:Nim游戏—博弈论
题目: AcWing 891. Nim游戏给定 n 堆石子,两位玩家轮流操作,每次操作可以从任意一堆石子中拿走任意数量的石子(可以拿完,但不能不拿),最后无法进行操作的人视为失败。问如果两人都采用最优策略,先手是否必胜。输入格式第一行包含整数 n。第二行包含 n 个数字,其中第 i 个数字表示第 i 堆石子的数量。输出格式如果先手方必胜,则输出 Yes。否则,输出 No。数据范围1≤n≤105,1≤每堆石子数≤109输入样例:输出样例:题目分析:该题是博弈论的题目,必胜状态——>操作完能够让游原创 2022-07-02 17:06:51 · 619 阅读 · 0 评论 -
数学知识:能被整除的数—容斥原理
题目: AcWing 890. 能被整除的数给定一个整数 n 和 m 个不同的质数 p1,p2,…,pm。请你求出 1∼n 中能被 p1,p2,…,pm 中的至少一个数整除的整数有多少个。输入格式第一行包含整数 n 和 m。第二行包含 m 个质数。输出格式输出一个整数,表示满足条件的整数的个数。数据范围1≤m≤16,1≤n,pi≤109输入样例:输出样例:题目分析:该题用到了容斥原理首先能被m个不同的质数整除,那么可能就会有1、2、3… m个的情况。我们使用二进制数来枚举所有情况用S1表示原创 2022-07-02 16:06:40 · 380 阅读 · 0 评论 -
数学知识:满足条件的01序列—求组合数
题目: AcWing 889. 满足条件的01序列给定 n 个 0 和 n 个 1,它们将按照某种顺序排成长度为 2n 的序列,求它们能排列成的所有序列中,能够满足任意前缀序列中 0 的个数都不少于 1 的个数的序列有多少个。输出的答案对 109+7 取模。输入格式共一行,包含整数 n。输出格式共一行,包含一个整数,表示答案。数据范围1≤n≤105输入样例:输出样例:题目分析:组合计数,卡特兰数...原创 2022-06-30 23:33:39 · 229 阅读 · 0 评论 -
数学知识:求组合数 IV—求组合数
题目: AcWing 888. 求组合数 IV输入 a,b,求 Cba 的值。注意结果可能很大,需要使用高精度计算。输入格式共一行,包含两个整数 a 和 b。输出格式共一行,输出 Cba 的值。数据范围1≤b≤a≤5000输入样例:输出样例:题目分析:这道题步骤:1.筛选素数2.求每个质数的次数3.用高精度乘把所有质因子乘上...原创 2022-06-30 21:33:55 · 109 阅读 · 0 评论 -
数学知识:求组合数 III—求组合数
题目: AcWing 887. 求组合数 III给定 n 组询问,每组询问给定三个整数 a,b,p,其中 p 是质数,请你输出 Cbamod p 的值。输入格式第一行包含整数 n。接下来 n 行,每行包含一组 a,b,p。输出格式共 n 行,每行输出一个询问的解。数据范围1≤n≤20,1≤b≤a≤1018,1≤p≤105,输入样例:输出样例:题目分析:从上面的公式可以知道组合数可以分解为数更小的组合数,我们可以使用快速幂求出逆元,来求的其组合数...原创 2022-06-30 20:53:38 · 186 阅读 · 0 评论 -
数学知识:求组合数 II—求组合数
题目: AcWing 886. 求组合数 II给定 n 组询问,每组询问给定两个整数 a,b,请你输出 Cbamod(109+7) 的值。输入格式第一行包含整数 n。接下来 n 行,每行包含一组 a 和 b。输出格式共 n 行,每行输出一个询问的解。数据范围1≤n≤10000,1≤b≤a≤105输入样例:输出样例:题目分析:该题是预处理阶乘因为组合可以换成阶乘的形式但是除法应该换成逆元,所以需要用到快速幂的知识求逆元。最后fact[i]表示i的阶乘,infact[i]表示i的逆元Cab=原创 2022-06-28 23:57:50 · 161 阅读 · 0 评论 -
数学知识:求组合数 I—求组合数
题目: AcWing 885. 求组合数 I给定 n 组询问,每组询问给定两个整数 a,b,请你输出 Cbamod(109+7) 的值。输入格式第一行包含整数 n。接下来 n 行,每行包含一组 a 和 b。输出格式共 n 行,每行输出一个询问的解。数据范围1≤n≤10000,1≤b≤a≤2000输入样例:输出样例:题目分析:根据加法计数原理有:Cba=Cb−1a−1+Cba−1所以可以先预处理,然后直接查表即可......原创 2022-06-28 21:47:21 · 72 阅读 · 0 评论 -
数学知识:线性同余方程—扩展欧几里得算法
题目: AcWing 878. 线性同余方程给定 n 组数据 ai,bi,mi,对于每组数求出一个 xi,使其满足 ai×xi≡bi(mod mi),如果无解则输出 impossible。输入格式第一行包含整数 n。接下来 n 行,每行包含一组数据 ai,bi,mi。输出格式输出共 n 行,每组数据输出一个整数表示一个满足条件的 xi,如果无解则输出 impossible。每组数据结果占一行,结果可能不唯一,输出任意一个满足条件的结果均可。输出答案必须在 int 范围之内。数据范围1≤n≤105,原创 2022-06-23 23:31:10 · 69 阅读 · 1 评论 -
数学知识:扩展欧几里得算法—扩展欧几里得算法
题目: AcWing 877. 扩展欧几里得算法 给定 n 对正整数 ai,bi,对于每对数,求出一组 xi,yi,使其满足 ai×xi+bi×yi=gcd(ai,bi)。输入格式第一行包含整数 n。接下来 n 行,每行包含两个整数 ai,bi。输出格式输出共 n 行,对于每组 ai,bi,求出一组满足条件的 xi,yi,每组结果占一行。本题答案不唯一,输出任意满足条件的 xi,yi 均可。数据范围1≤n≤105,1≤ai,bi≤2×109输入样例:输出样例:...原创 2022-06-23 23:18:29 · 104 阅读 · 0 评论 -
数学知识:快速幂求逆元—快速幂
题目: AcWing 876. 快速幂求逆元给定 n 组 ai,pi,其中 pi 是质数,求 ai 模 pi 的乘法逆元,若逆元不存在则输出 impossible。注意:请返回在 0∼p−1 之间的逆元。乘法逆元的定义输入格式第一行包含整数 n。接下来 n 行,每行包含一个数组 ai,pi,数据保证 pi 是质数。输出格式输出共 n 行,每组数据输出一个结果,每个结果占一行。若 ai 模 pi 的乘法逆元存在,则输出一个整数,表示逆元,否则输出 impossible。数据范围1≤n≤105,1≤a原创 2022-06-22 23:41:31 · 182 阅读 · 0 评论 -
数学知识:快速幂—快速幂
题目: AcWing 875. 快速幂给定 n 组 ai,bi,pi,对于每组数据,求出 aibimod pi 的值。输入格式第一行包含整数 n。接下来 n 行,每行包含三个整数 ai,bi,pi。输出格式对于每组数据,输出一个结果,表示 aibimod pi 的值。每个结果占一行。数据范围1≤n≤100000,1≤ai,bi,pi≤2×109输入样例:输出样例:题目分析:求 aibimod pi先预处理出:a的20次方 mod pa的21次方 mod p…a的2logk次方 mod原创 2022-06-22 23:20:52 · 93 阅读 · 0 评论 -
数学知识:欧拉函数—欧拉函数
题目: AcWing 873. 欧拉函数给定 n 个正整数 ai,请你求出每个数的欧拉函数。欧拉函数的定义1∼N 中与 N 互质的数的个数被称为欧拉函数,记为 ϕ(N)。若在算数基本定理中,N=p1a1p2a2…pmam,则:ϕ(N) = N×(p1−1)/p1×(p2−1)/p2×…×(pm−1)/pm输入格式第一行包含整数 n。接下来 n 行,每行包含一个正整数 ai。输出格式输出共 n 行,每行输出一个正整数 ai 的欧拉函数。数据范围1≤n≤100,1≤ai≤2×109输入样例:输原创 2022-06-22 21:27:03 · 408 阅读 · 0 评论 -
数学知识:最大公约数—约数
题目: AcWing 872. 最大公约数 给定 n 对正整数 ai,bi,请你求出每对数的最大公约数。输入格式第一行包含整数 n。接下来 n 行,每行包含一个整数对 ai,bi。输出格式输出共 n 行,每行输出一个整数对的最大公约数。数据范围1≤n≤105,1≤ai,bi≤2×109输入样例:输出样例:...原创 2022-06-21 22:02:39 · 104 阅读 · 0 评论 -
数学知识:约数之和—约数
题目: AcWing 871. 约数之和给定 n 个正整数 ai,请你输出这些数的乘积的约数之和,答案对 109+7 取模。输入格式第一行包含整数 n。接下来 n 行,每行包含一个整数 ai。输出格式输出一个整数,表示所给正整数的乘积的约数之和,答案需对 109+7 取模。数据范围1≤n≤100,1≤ai≤2×109输入样例:输出样例:题目分析:如果 N=p1a1∗p2a2∗…∗pkak那么约数之和: (p10+p11+…+p1a1)∗…∗(pk0+pk1+…+pkak)如果求每一项中所有p原创 2022-06-21 21:31:46 · 151 阅读 · 0 评论 -
数学知识:约数个数—约数
题目: AcWing 870. 约数个数给定 n 个正整数 ai,请你输出这些数的乘积的约数个数,答案对 109+7 取模。输入格式第一行包含整数 n。接下来 n 行,每行包含一个整数 ai。输出格式输出一个整数,表示所给正整数的乘积的约数个数,答案需对 109+7 取模。数据范围1≤n≤100,1≤ai≤2×109输入样例:输出样例:约数推导因为一个数可以因式分解N = p1a1 * p2a2 * …pkak那么每一个P都是一个质数,选择可以选择 0~a1个 相乘就是一个约数那么总个数就原创 2022-06-21 21:09:42 · 189 阅读 · 0 评论 -
搜索与图论:二分图的最大匹配—匈牙利算法
题目: AcWing 861. 二分图的最大匹配给定一个二分图,其中左半部包含 n1 个点(编号 1∼n1),右半部包含 n2 个点(编号 1∼n2),二分图共包含 m 条边。数据保证任意一条边的两个端点都不可能在同一部分中。请你求出二分图的最大匹配数。二分图的匹配:给定一个二分图 G,在 G 的一个子图 M 中,M 的边集 {E} 中的任意两条边都不依附于同一个顶点,则称 M 是一个匹配。二分图的最大匹配:所有匹配中包含边数最多的一组匹配被称为二分图的最大匹配,其边数即为最大匹配数。输入格式第一行包含转载 2022-06-21 00:09:42 · 123 阅读 · 0 评论 -
搜索与图论:染色法判定二分图—染色法判定二分图
题目: AcWing 860. 染色法判定二分图给定一个 n 个点 m 条边的无向图,图中可能存在重边和自环。请你判断这个图是否是二分图。输入格式第一行包含两个整数 n 和 m。接下来 m 行,每行包含两个整数 u 和 v,表示点 u 和点 v 之间存在一条边。输出格式如果给定图是二分图,则输出 Yes,否则输出 No。数据范围1≤n,m≤105输入样例:输出样例:二分图:当且仅当图中不含奇数环使用染色法,遍历所有点,如果点未染色将其染色为1,使用广度优先或者深度优先将该点附近的点染色为2,附近的原创 2022-06-19 21:51:31 · 235 阅读 · 0 评论 -
搜索与图论:Kruskal算法求最小生成树—Kruskal
题目: AcWing 859. Kruskal算法求最小生成树给定一个 n 个点 m 条边的无向图,图中可能存在重边和自环,边权可能为负数。求最小生成树的树边权重之和,如果最小生成树不存在则输出 impossible。给定一张边带权的无向图 G=(V,E),其中 V 表示图中点的集合,E 表示图中边的集合,n=|V|,m=|E|。由 V 中的全部 n 个顶点和 E 中 n−1 条边构成的无向连通子图被称为 G 的一棵生成树,其中边的权值之和最小的生成树被称为无向图 G 的最小生成树。输入格式第一行包含两原创 2022-06-17 23:47:01 · 168 阅读 · 0 评论 -
搜索与图论:Prim算法求最小生成树—Prim
AcWing 858. Prim算法求最小生成树给定一个 n 个点 m 条边的无向图,图中可能存在重边和自环,边权可能为负数。求最小生成树的树边权重之和,如果最小生成树不存在则输出 impossible。给定一张边带权的无向图 G=(V,E),其中 V 表示图中点的集合,E 表示图中边的集合,n=|V|,m=|E|。由 V 中的全部 n 个顶点和 E 中 n−1 条边构成的无向连通子图被称为 G 的一棵生成树,其中边的权值之和最小的生成树被称为无向图 G 的最小生成树。输入格式第一行包含两个整数 n 和原创 2022-06-17 00:07:51 · 207 阅读 · 0 评论 -
搜索与图论:Dijkstra求最短路 II—Dijkstra(最短路径)
题目: AcWing 850. Dijkstra求最短路 II给定一个 n 个点 m 条边的有向图,图中可能存在重边和自环,所有边权均为非负值。请你求出 1 号点到 n 号点的最短距离,如果无法从 1 号点走到 n 号点,则输出 −1。输入格式第一行包含整数 n 和 m。接下来 m 行每行包含三个整数 x,y,z,表示存在一条从点 x 到点 y 的有向边,边长为 z。输出格式输出一个整数,表示 1 号点到 n 号点的最短距离。如果路径不存在,则输出 −1。数据范围1≤n,m≤1.5×105,图中涉原创 2022-06-16 19:46:37 · 179 阅读 · 0 评论 -
搜索与图论:Floyd求最短路—Floyd(最短路径)
题目: AcWing 854. Floyd求最短路给定一个 n 个点 m 条边的有向图,图中可能存在重边和自环,边权可能为负数。再给定 k 个询问,每个询问包含两个整数 x 和 y,表示查询从点 x 到点 y 的最短距离,如果路径不存在,则输出 impossible。数据保证图中不存在负权回路。输入格式第一行包含三个整数 n,m,k。接下来 m 行,每行包含三个整数 x,y,z,表示存在一条从点 x 到点 y 的有向边,边长为 z。接下来 k 行,每行包含两个整数 x,y,表示询问点 x 到点 y 的最转载 2022-06-16 17:53:52 · 121 阅读 · 0 评论 -
搜索与图论:spfa判断负环—spfa(最短路径)
题目: AcWing 852. spfa判断负环给定一个 n 个点 m 条边的有向图,图中可能存在重边和自环, 边权可能为负数。请你判断图中是否存在负权回路。输入格式第一行包含整数 n 和 m。接下来 m 行每行包含三个整数 x,y,z,表示存在一条从点 x 到点 y 的有向边,边长为 z。输出格式如果图中存在负权回路,则输出 Yes,否则输出 No。数据范围1≤n≤2000,1≤m≤10000,图中涉及边长绝对值均不超过 10000。输入样例:输出样例:题目分析:在spfa求最短路的基础上,原创 2022-06-16 17:26:26 · 112 阅读 · 0 评论 -
搜索与图论:spfa求最短路—spfa(最短路径)
题目: AcWing 851. spfa求最短路给定一个 n 个点 m 条边的有向图,图中可能存在重边和自环, 边权可能为负数。请你求出 1 号点到 n 号点的最短距离,如果无法从 1 号点走到 n 号点,则输出 impossible。数据保证不存在负权回路。输入格式第一行包含整数 n 和 m。接下来 m 行每行包含三个整数 x,y,z,表示存在一条从点 x 到点 y 的有向边,边长为 z。输出格式输出一个整数,表示 1 号点到 n 号点的最短距离。如果路径不存在,则输出 impossible。数据范原创 2022-06-16 16:28:13 · 92 阅读 · 0 评论 -
搜索与图论:有边数限制的最短路—bellman-ford(最短路径)
题目: AcWing 853. 有边数限制的最短路给定一个 n 个点 m 条边的有向图,图中可能存在重边和自环, 边权可能为负数。请你求出从 1 号点到 n 号点的最多经过 k 条边的最短距离,如果无法从 1 号点走到 n 号点,输出 impossible。注意:图中可能 存在负权回路 。输入格式第一行包含三个整数 n,m,k。接下来 m 行,每行包含三个整数 x,y,z,表示存在一条从点 x 到点 y 的有向边,边长为 z。输出格式输出一个整数,表示从 1 号点到 n 号点的最多经过 k 条边的最短原创 2022-06-16 15:41:00 · 130 阅读 · 0 评论 -
搜索与图论:Dijkstra求最短路 I—Dijkstra(最短路径)
迪杰斯特拉算法,该博客记录ACWing算法基础中,迪杰斯特拉算法的模板题,并进行实现原创 2022-06-10 23:37:19 · 128 阅读 · 0 评论 -
搜索与图论:有向图的拓扑序列—拓扑排序
拓扑排序C++模板:题目: AcWing 848. 有向图的拓扑序列给定一个 n 个点 m 条边的有向图,点的编号是 1 到 n,图中可能存在重边和自环。请输出任意一个该有向图的拓扑序列,如果拓扑序列不存在,则输出 −1。若一个由图中所有点构成的序列 A 满足:对于图中的每条边 (x,y),x 在 A 中都出现在 y 之前,则称 A 是该图的一个拓扑序列。输入格式第一行包含两个整数 n 和 m。接下来 m 行,每行包含两个整数 x 和 y,表示存在一条从点 x 到点 y 的有向边 (x,y)。输出格式原创 2022-06-06 23:51:13 · 229 阅读 · 0 评论 -
搜索与图论:图中点的层次—树与图的广度优先遍历
题目: AcWing 847. 图中点的层次给定一个 n 个点 m 条边的有向图,图中可能存在重边和自环。所有边的长度都是 1,点的编号为 1∼n。请你求出 1 号点到 n 号点的最短距离,如果从 1 号点无法走到 n 号点,输出 −1。输入格式第一行包含两个整数 n 和 m。接下来 m 行,每行包含两个整数 a 和 b,表示存在一条从 a 走到 b 的长度为 1 的边。输出格式输出一个整数,表示 1 号点到 n 号点的最短距离。数据范围1≤n,m≤105输入样例:输出样例:分析:树与图的广度优先原创 2022-06-06 21:24:07 · 180 阅读 · 0 评论 -
搜索与图论:树的重心—树与图的深度优先遍历
树与图的存储树是一种特殊的图,与图的存储方式相同。对于无向图中的边ab,存储两条有向边a->b, b->a。因此我们可以只考虑有向图的存储。(1) 邻接矩阵:g[a][b] 存储边a->b(2) 邻接表:同样邻接表存储也可以使用map和vector题目: AcWing 846. 树的重心给定一颗树,树中包含 n 个结点(编号 1∼n)和 n−1 条无向边。请你找到树的重心,并输出将重心删除后,剩余各个连通块中点数的最大值。重心定义:重心是指树中的一个结点,如果将这个点删除后,剩余各个连通块中点原创 2022-06-06 21:10:16 · 244 阅读 · 0 评论 -
动态规划:整数划分—计数类DP
题目: AcWing 900. 整数划分一个正整数 n 可以表示成若干个正整数之和,形如:n=n1+n2+…+nk,其中 n1≥n2≥…≥nk,k≥1。我们将这样的一种表示称为正整数 n 的一种划分。现在给定一个正整数 n,请你求出 n 共有多少种不同的划分方法。输入格式共一行,包含一个整数 n。输出格式共一行,包含一个整数,表示总划分数量。由于答案可能很大,输出结果请对 109+7 取模。数据范围1≤n≤1000输入样例:输出样例:题目分析:思路:把1,2,3, … n分别看做n个物体的体积,这原创 2022-06-01 21:47:25 · 98 阅读 · 0 评论 -
数据结构:字符串哈希—哈希表
C++字符串哈希模板:理解:把字符串变成一个p进制数字(哈希值),实现不同的字符串映射到不同的数字。题目: AcWing 841. 字符串哈希给定一个长度为 n 的字符串,再给定 m 个询问,每个询问包含四个整数 l1,r1,l2,r2,请你判断 [l1,r1] 和 [l2,r2] 这两个区间所包含的字符串子串是否完全相同。字符串中只包含大小写英文字母和数字。输入格式第一行包含整数 n 和 m,表示字符串长度和询问次数。第二行包含一个长度为 n 的字符串,字符串中只包含大小写英文字母和数字。接下来原创 2022-06-01 20:55:32 · 372 阅读 · 0 评论 -
数据结构:食物链—并查集
题目: AcWing 240. 食物链动物王国中有三类动物 A,B,C,这三类动物的食物链构成了有趣的环形。A 吃 B,B 吃 C,C 吃 A。现有 N 个动物,以 1∼N 编号。每个动物都是 A,B,C 中的一种,但是我们并不知道它到底是哪一种。有人用两种说法对这 N 个动物所构成的食物链关系进行描述:第一种说法是 1 X Y,表示 X 和 Y 是同类。第二种说法是 2 X Y,表示 X 吃 Y。此人对 N 个动物,用上述两种说法,一句接一句地说出 K 句话,这 K 句话有的是真的,有的是原创 2022-05-28 23:47:09 · 130 阅读 · 0 评论 -
数据结构:KMP字符串—KMP
C++KMP模板:// s[]是长文本,p[]是模式串,n是s的长度,m是p的长度求模式串的Next数组:for (int i = 2, j = 0; i <= m; i ++ ){ while (j && p[i] != p[j + 1]) j = ne[j]; if (p[i] == p[j + 1]) j ++ ; ne[i] = j;}// 匹配for (int i = 1, j = 0; i <= n; i ++ ){原创 2022-05-28 20:20:48 · 79 阅读 · 0 评论 -
数据结构:最大异或对—Trie
题目: AcWing 143. 最大异或对在给定的 N 个整数 A1,A2……AN 中选出两个进行 xor(异或)运算,得到的结果最大是多少?输入格式第一行输入一个整数 N。第二行输入 N 个整数 A1~AN。输出格式输出一个整数表示答案。数据范围1≤N≤105,0≤Ai<231输入样例:31 2 3输出样例:3题目分析:xor(异或就是^运算)1^1=1, 1^0=1 ,0^1=1, 0^0=0所以当两位数二进制表示中,尽量使两位数的二进制相反则异或最大这原创 2022-05-25 21:14:45 · 249 阅读 · 0 评论 -
数据结构:Trie字符串统计—Trie
C++Trie树模板:int son[N][26], cnt[N], idx;// 0号点既是根节点,又是空节点// son[][]存储树中每个节点的子节点// cnt[]存储以每个节点结尾的单词数量// 插入一个字符串void insert(char *str){ int p = 0; for (int i = 0; str[i]; i ++ ) { int u = str[i] - 'a'; if (!son[p][u]) son[原创 2022-05-24 23:29:31 · 119 阅读 · 0 评论 -
数据结构:表达式求值—栈
题目: AcWing 3302. 表达式求值给定一个表达式,其中运算符仅包含 +,-,*,/(加 减 乘 整除),可能包含括号,请你求出表达式的最终值。注意:数据保证给定的表达式合法。题目保证符号 - 只作为减号出现,不会作为负号出现,例如,-1+2,(2+2)*(-(1+1)+2) 之类表达式均不会出现。题目保证表达式中所有数字均为正整数。题目保证表达式在中间计算过程以及结果中,均不超过 231−1。题目中的整除是指向 0 取整,也就是说对于大于 0 的结果向下取整,例如 5/3=1,对于小原创 2022-05-24 21:06:41 · 93 阅读 · 0 评论 -
动态规划:石子合并—区间DP
题目: AcWing 282. 石子合并设有 N 堆石子排成一排,其编号为 1,2,3,…,N。每堆石子有一定的质量,可以用一个整数来描述,现在要将这 N 堆石子合并成为一堆。每次只能合并相邻的两堆,合并的代价为这两堆石子的质量之和,合并后与这两堆石子相邻的石子将和新堆相邻,合并时由于选择的顺序不同,合并的总代价也不相同。例如有 4 堆石子分别为 1 3 5 2, 我们可以先合并 1、2 堆,代价为 4,得到 4 5 2, 又合并 1,2 堆,代价为 9,得到 9 2 ,再合并得到 11,总代价为原创 2022-05-24 00:02:23 · 203 阅读 · 0 评论 -
动态规划:分组背包问题—背包问题
题目: AcWing 9. 分组背包问题有 N 组物品和一个容量是 V 的背包。每组物品有若干个,同一组内的物品最多只能选一个。每件物品的体积是 vij,价值是 wij,其中 i 是组号,j 是组内编号。求解将哪些物品装入背包,可使物品总体积不超过背包容量,且总价值最大。输出最大价值。输入格式第一行有两个整数 N,V,用空格隔开,分别表示物品组数和背包容量。接下来有 N 组数据:每组数据第一行有一个整数 Si,表示第 i 个物品组的物品数量;每组数据接下来有 Si 行,每行有两个整数 v原创 2022-05-21 11:47:47 · 216 阅读 · 0 评论 -
动态规划:多重背包问题 II—背包问题
题目: AcWing 5. 多重背包问题 II有 N 种物品和一个容量是 V 的背包。第 i 种物品最多有 si 件,每件体积是 vi,价值是 wi。求解将哪些物品装入背包,可使物品体积总和不超过背包容量,且价值总和最大。输出最大价值。输入格式第一行两个整数,N,V,用空格隔开,分别表示物品种数和背包容积。接下来有 N 行,每行三个整数 vi,wi,si,用空格隔开,分别表示第 i 种物品的体积、价值和数量。输出格式输出一个整数,表示最大价值。数据范围0<N≤10000<原创 2022-05-20 23:39:08 · 172 阅读 · 0 评论