acwing刷题
文章平均质量分 67
命运从未公平
三枚筹码足矣,所有,或者一无所有
展开
-
282. 石子合并(acwing)
最终,dp[1][n] 存储的就是将所有石子合并成一堆的最小代价。例如有4堆石子分别为 1 3 5 2, 我们可以先合并1、2堆,代价为4,得到4 5 2, 又合并 1,2堆,代价为9,得到9 2 ,再合并得到11,总代价为4+9+11=24;每次只能合并相邻的两堆,合并的代价为这两堆石子的质量之和,合并后与这两堆石子相邻的石子将和新堆相邻,合并时由于选择的顺序不同,合并的总代价也不相同。如果第二步是先合并2,3堆,则代价为7,得到4 7,最后一次合并代价为11,总代价为4+7+11=22。原创 2024-04-10 15:47:43 · 377 阅读 · 0 评论 -
895.最长公共子序列(acwing)
给定两个长度分别为 N 和 M 的字符串 A 和 B,求既是 A 的子序列又是 B 的子序列的字符串长度最长是多少。代码实现了计算两个字符串最长公共子序列(Longest Common Subsequence, LCS)的长度。第二行包含一个长度为 N 的字符串,表示字符串 A。第三行包含一个长度为 M 的字符串,表示字符串 B。个字符时,最长公共子序列的长度。通过比较字符串A的第。上述代码使用了二维动态规划的方法来解决问题。输出一个整数,表示最大长度。代表考虑字符串A的前。个字符和字符串B的前。原创 2024-04-09 21:17:50 · 144 阅读 · 0 评论 -
898. 数字三角形(acwing)
给定一个如下图所示的数字三角形,从顶部出发,在每一结点可以选择移动至其左下方的结点或移动至其右下方的结点,一直走到底层,要求找出一条路径,使路径上的数字的和最大。对于数字三角形的每一层的每一个数,其最大路径和等于它上一层左上方或正上方的最大路径和加上当前数值的较大者。这段代码首先使用一个双重循环读取输入的数字三角形,然后使用了动态规划的方法来求解问题。接下来n 行,每行包含若干整数,其中第i 行表示数字三角形第i 层包含的整数。代码的目的是解决数字三角形的问题,即找到从顶部到底部路径上数字总和最大的值。原创 2024-04-09 00:22:18 · 237 阅读 · 0 评论 -
895.最长上升子序列(acwing)
为结尾的最长上升子序列的长度。第一层循环遍历整个数列,第二层循环为当前元素找到一个可能的上升子序列的前驱,从而实现状态的更新。最终通过遍历dp数组找到最大值,即为所求的最长上升子序列的长度。来提供问题的答案,即数列中最长上升子序列的长度。在给定的样例输入下,输出的结果应该是4,这意味着可以找到长度为4的上升子序列(例如1,2,5,6)。给定一个长度为 N 的数列,求数值严格单调递增的子序列的长度最长是多少。这段代码使用了动态规划中的状态转移方程,对于数组。第二行包含 N 个整数,表示完整序列。原创 2024-04-09 00:11:12 · 267 阅读 · 0 评论 -
9. 分组背包问题(acwing)
有 N 组物品和一个容量是 V 的背包。每组物品有若干个,同一组内的物品最多只能选一个。每件物品的体积是 v,价值是 w,其中 i 是组号,j 是组内编号。求解将哪些物品装入背包,可使物品总体积不超过背包容量,且总价值最大。输出最大价值。第一行有两个整数 N,V,用空格隔开,分别表示物品组数和背包容量。接下来有 N 组数据:每组数据第一行有一个整数 S,表示第 i 个物品组的物品数量;每组数据接下来有 S行,每行有两个整数 v,w。原创 2024-04-06 23:32:20 · 458 阅读 · 0 评论 -
5. 多重背包问题 II(acwing)
二进制优化的思路是将每种物品拆分成若干个组合,使得每个组合内物品的数量是2的幂次,这样可以通过少量的组合来组成任意数量的物品,减少了状态的数量。这段代码是用于解决多重背包问题的,它使用了动态规划(DP)的方法,并且通过二进制的思想对多重背包问题进行了优化。上面的代码是对多重背包问题的直观解决方法,在这种方法中,我们对于每种物品,都尝试从0件到s[i]件之间的所有可能性,并更新状态。这种方法遍历了物品的每种可能性,确保找到在不超过背包容量的情况下,物品的最大总价值。种物品的数量,这个方程表示背包容量为。原创 2024-04-06 22:47:02 · 1102 阅读 · 0 评论 -
3. 完全背包问题(acwing)
完全背包问题与0-1背包问题的重要区别在于:完全背包问题中的每种物品可以选取无限次,而0-1背包问题中每种物品只能选取一次。的情况下能够装入物品的最大价值。代表在背包中已经装有一定体积物品的情况下再加入当前考虑的物品所能达到的价值。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。第一行两个整数,N,V,用空格隔开,分别表示物品种数和背包容积。有 N种物品和一个容量是 V的背包,每种物品都有无限件可用。,用空格隔开,分别表示第 i 种物品的体积和价值。输出一个整数,表示最大价值。原创 2024-04-03 23:01:12 · 305 阅读 · 0 评论 -
01背包问题(acwing)
通过遍历每件物品,并对每种容量的背包计算如果添加这件物品时能获得的最大价值,从而找到最优解。和二维动态规划相比,这种方法显著减少了所需的存储空间,因为它只需要一个一维数组来存储中间结果,而不是为每个物品和每种容量组合都保存一个独立的结果。这段代码是用 C++ 编写的,解决了经典的01背包问题。记录的是对于每种容量的背包,当前可以达到的最大价值。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。第一行两个整数,N,V,用空格隔开,分别表示物品数量和背包容积。第 i件物品的体积是 v。原创 2024-04-01 00:58:05 · 483 阅读 · 0 评论 -
4262. 空调(acwing)
代码的这部分利用了一种称为“差分”的技巧,来计算为了达到所有牛希望的温度而需要发送的空调调节命令的最小数量。但是,为了简化理解,我们跳过这部分的具体计算,直接解释其作用:它帮助我们确定从一个牛棚到下一个牛棚,温度调整的净变化是多少。这里的核心思想是,通过分别计算温度的增加和降低需求,然后找到满足这些需求的最小操作集,从而使得每个牛栏的温度都达到其希望的温度。8的温度升高 1个单位」。请帮助 Farmer John 求出他需要向新的空调系统发送的命令的最小数量,使得每头奶牛的牛栏都处于其中的奶牛的理想温度。原创 2024-03-16 17:01:13 · 1004 阅读 · 0 评论 -
844. 走迷宫(acwing)
在探索过程中,维护一个队列来记录待探索的位置,以及一个数组来记录到达每个位置的最少步数。给定一个n*m的二维整数数组,用来表示一个迷宫,数组中只包含0或1,其中0表示可以走的路,1表示不可通过的墙壁。最初,有一个人位于左上角(1, 1)处,已知该人每次可以向上、下、左、右任意一个方向移动一个位置。数据保证(1, 1)处和(n, m)处的数字为0,且一定至少存在一条通路。请问,该人从左上角移动至右下角(n, m)处,至少需要移动多少次。接下来n行,每行包含m个整数(0或1),表示完整的二维数组迷宫。原创 2024-03-15 23:50:50 · 404 阅读 · 0 评论 -
842. 排列数字(acwing)
参数,这是因为它在这个特定的实现中没有用到。程序是根据数字是否已经被使用来决定下一步的递归,而不是基于当前的递归深度或位置,因此即便这个参数被传递到函数,它也不会被使用。数组的大小被硬编码为10,足够容纳所有可能的输入。在更通用的实现中,这个大小应该是根据输入动态调整的。这个程序是一个简单的排列生成器,使用深度优先搜索和回溯来生成所有可能的数字排列。给定一个整数 n,将数字 1∼n 排成一排,将会有很多种排列方法。现在,请你按照字典序将所有的排列方法输出。按字典序输出所有排列方案,每个方案占一行。原创 2024-03-15 15:53:16 · 344 阅读 · 0 评论 -
3745. 牛的学术圈 I(acwing)
接着,通过二分查找确定最大的 h 值,使得至少有 h 篇论文的引用次数不小于这个 h 值。例如,如果一名研究员有 4 篇论文,引用次数分别为 (1, 100, 2, 3),则 h 指数为 2;h指数试图为研究者的学术影响力和成果的广度及深度提供一个统一的评价标准,它同时考虑了发表论文的数量与论文的学术影响力。经过一段时间的学术研究,她已经发表了 N 篇论文,并且她的第 i 篇论文得到了来自其他研究文献的 ci 次引用。为了提升她的 h 指数,Bessie 计划写一篇综述,并引用一些她曾经写过的论文。原创 2024-03-14 23:26:15 · 1258 阅读 · 0 评论 -
837. 连通块中点的数量(acwing)
函数中,代码首先接收输入的节点数和操作数,然后通过循环处理每一条操作指令。指令分为三种类型,分别对应代码中的三个分支。对于每个询问指令 Q1 a b,如果 a 和 b 在同一个连通块中,则输出 Yes,否则输出 No。数组用来表示以当前节点为根节点的连通块的大小,初始化为1。接下来 m 行,每行包含一个操作指令,指令为 C a b,Q1 a b 或 Q2 a 中的一种。函数是并查集的核心,用于查找节点的根节点,并在这个过程中进行路径压缩。数组用来表示每个节点的父节点,初始化时每个节点都是自己的父节点。原创 2024-03-12 00:09:07 · 356 阅读 · 0 评论 -
836. 合并集合(acwing)
查找操作通过递归实现路径压缩,即在查找根节点的过程中,将路径上的每个节点直接连接到根节点,从而减少后续查找的时间。合并操作简单直接,只需要将一个集合的根节点指向另一个集合的根节点。主函数中通过读入操作,利用这两个函数处理合并和查询请求,最后输出每次查询的结果。并查集是一种数据结构,它提供了两个主要功能:找到某个元素所在的集合的代表元素(find),以及合并两个元素所在的集合(union)。,都要输出一个结果,如果 a 和 b 在同一集合内,则输出 Yes,否则输出 No。第一行输入整数 n 和 m。原创 2024-03-12 00:08:46 · 853 阅读 · 0 评论 -
794. 高精度除法(acwing)
特别注意,这个程序可以处理非常大的被除数,因为它将被除数作为字符串处理,逐位计算除法。这种方法避免了因为被除数过大而导致的整数溢出问题。给定两个非负整数(不含前导 0) A,B,请你计算 A/B 的商和余数。共两行,第一行包含整数 A,第二行包含整数 B。共两行,第一行输出所求的商,第二行输出所求余数。1≤A的长度≤100000,原创 2024-03-09 16:29:13 · 377 阅读 · 0 评论 -
793.高精度乘法(acwing)
给定两个正整数A和B,请你计算A * B的值。共两行,第一行包含整数A,第二行包含整数B。共一行,包含A * B的值。1≤A的长度≤100000,原创 2024-03-09 15:51:12 · 487 阅读 · 0 评论 -
792. 高精度减法(acwing)
函数主要负责读取输入,调用比较与减法函数,并按照要求输出结果。给定两个正整数,计算它们的差,计算结果可能为负数。函数,它实现了实际的减法运算过程。共两行,每行包含一个整数。共一行,包含所求的差。原创 2024-03-09 15:22:01 · 356 阅读 · 0 评论 -
791.高精度加法(acwing)
给定两个正整数(不含前导 0),计算它们的和。函数,它负责实际的加法运算过程。共两行,每行包含一个整数。1≤整数长度≤100000。共一行,包含所求的和。主要负责读取输入,调用。原创 2024-03-09 14:40:07 · 427 阅读 · 0 评论 -
562. 壁画(acwing)
在第二天,他都可以在另一段美观评分 3 的墙段上作画。在每天结束时,一段未被涂颜料的墙将被摧毁(Thanh 使用的是防水涂料,因此涂漆的部分不能被破坏),且被毁掉的墙段一定只与一段还未被毁掉的墙面相邻。在接下来的每一天,他只能选择与绘制完成的墙面相邻的墙段进行作画,因为他不想分开壁画。Thanh想要保证,无论墙壁是如何被摧毁的,他都可以达到至少 B 的美观总分。的连续墙段的美观评分总和,并在所有可能的位置中找到可以保证的最大美观评分。Thanh 的壁画的总体美观程度将等于他作画的所有墙段的美观评分的总和。原创 2024-03-08 23:31:44 · 813 阅读 · 0 评论 -
798. 差分矩阵(acwing)
每个操作表示一个子矩阵,将子矩阵中的每个元素都加上给定的值c。这是通过将子矩阵的四个角进行相应的操作得到的:左上角加上c,右上角的下一个元素减去c,左下角的下一个元素减去c,右下角的下一个元素加上c。入一个 n 行 m 列的整数矩阵,再输入 q 个操作,每个操作包含五个整数 x1,y1,x2,y2,c,其中 (x1,y1) 和 (x2,y2) 表示一个子矩阵的左上角坐标和右下角坐标。最终矩阵的计算是通过原始矩阵中每个元素等于上方元素加上左侧元素减去左上角元素再加上差分矩阵中对应位置的元素得到的。原创 2024-03-08 00:40:19 · 381 阅读 · 0 评论 -
797. 差分(acwing)
每个操作表示一个区间 [l, r],将区间内的每个数都加上给定的值c。差分数组是一种特殊的数组,它记录了原始序列每个数与前一个数之差的变化。最后,通过差分数组和原始序列的关系,计算出最终的序列,并输出每个数。最终序列的计算是通过原始序列中每个数等于前一个数加上差分数组中对应位置的数得到的。接下来输入 m mm 个操作,每个操作包含三个整数 l,r,c, 表示将序列中 [l,r] 之间的每个数加上 c。接下来 m 行,每行包含三个整数 l,r,c,表示一个操作。共一行,包含 n 个整数,表示最终序列。原创 2024-03-08 00:39:54 · 400 阅读 · 0 评论 -
503. 借教室(acwing)
这是通过不断缩小检查的订单范围实现的,直到找到一个点,在这一点上,如果包括这个订单,就无法满足所有订单的需求。通过对差分数组进行前缀和操作,我们可以还原出每天实际可用的教室数量,并检查是否所有的订单都可以被满足。如果在分配的过程中遇到一份订单无法完全满足,则需要停止教室的分配,通知当前申请人修改订单。借教室的原则是先到先得,也就是说我们要按照订单的先后顺序依次为每份订单分配教室。教室的大小功能不同,借教室人的身份不同,借教室的手续也不一样。个教室,而它们具体是哪些教室,每天是否是相同的教室则不用考虑。原创 2024-03-07 17:12:17 · 586 阅读 · 0 评论 -
796.子矩阵的和(acwing)
二维前缀和是一种数据预处理技术,它使得我们能够快速(在常数时间内)查询任何子矩阵的元素和。二维前缀和 s[i][j] 表示原始矩阵中所有位于第1行第1列到第i行第j列形成的子矩阵的元素之和。输入一个 n 行 m 列的整数矩阵,再输入 q 个询问,每个询问包含四个整数 x1,y1,x2,y2,表示一个子矩阵的左上角坐标和右下角坐标。接下来 q 行,每行包含四个整数 x1,y1,x2,y2,表示一组询问。接下来 n 行,每行包含 m 个整数,表示整数矩阵。第一行包含三个整数 n,m,q。原创 2024-03-07 00:02:23 · 943 阅读 · 0 评论 -
795. 前缀和(acwing)
前缀和数组s是这样定义的:s[i]表示从a[1]到a[i]的元素和。这意味着,为了得到任意区间[l,r]的和,我们可以用s[r](包含从a[1]到a[r]的所有元素的和)减去s[l-1](包含从a[1]到a[l-1]的所有元素的和)。注意:本代码中的数组从索引1开始,而不是通常的从索引0开始,因此当计算前缀和时,s[0]默认为0。这也是为什么在计算区间和时使用s[r]-s[l-1]而不是s[r]-s[l]。如果l为1,s[l-1]为s[0],表示没有元素的和,即为0。这段代码的核心是前缀和的概念。原创 2024-03-07 00:02:04 · 467 阅读 · 0 评论 -
把字符串转换成整数(acwing)
请你写一个函数 StrToInt,实现把字符串转换成整数这个功能。当然,不能使用 atoi 或者其他类似的库函数。输入字符串长度 [0,20]。原创 2024-01-15 22:56:03 · 441 阅读 · 0 评论 -
FEB(acwing)
目前,我们只能看到改动后的字符串 S,对于其中的每个 F,我们并不清楚它之前是 B 还是 E。我们想要计算 S的价值,不幸的是,在我们得到 S之前,约翰将其中的一些字符改为了 F。变了中间任意一个数(每改变一位),在原有的基础上±两个1,k+1±1±1。有一个长度为 N的字符串 S,其中的每个字符要么是 B,要么是 E。如果k=5,max=6,6-2=4,4-2=2,2-2=0;第一行输出一个整数 K,表示改动前的 S的可能价值的数量。所以,所有的情况是:k+1,k-1,k-3,k-5,…原创 2024-01-13 22:07:45 · 1131 阅读 · 0 评论