
AcWing算法题解
文章平均质量分 90
精选作者一些不会的acwing算法题
akeyy
这个作者很懒,什么都没留下…
展开
-
leetcode 1186.删除一次得到子数组最大和
说完了Kadane算法,我们再来看看本题,本题可以删去子数组中的一个元素或不删去。我们先考虑这样一个问题:如果将题意中的“删除一次”的约束删去,那么本题又该如何做呢?Kadane算法利用了动态规划的算法,只用遍历一遍数组即可找到子数组的最大和。,我们就可以得到子数组最大和。但是,这样做的时间复杂度是。个元素结尾的子数组的最大和。个元素结尾的而且不删去元素的子数组的最大和,以。首先,我们的直觉肯定是先用暴力,枚举每一个点。个元素结尾而且删去一个元素的子数组的最大和。的更新方式和上述Kadane算法相同,而。原创 2024-07-22 10:31:28 · 744 阅读 · 0 评论 -
AcWing 4262.空调
我们知道,如果要想对一个数组的某个区间进行加减操作,最方便的方法是利用差分。那么我们一个最简单的直觉就是求出所有正数的和,即为操作的次数。我们知道,每当进行一次差分操作,就必有一个差分数组的元素。所谓差分,就是利用原数组构造一个数组,使其满足。数组,并求这些操作所需要的最少操作次数。这样上面的操作就等价于求出从。粗看本题,大概意思就是让我们对。数组进行变换,让其同时减去一个。这样原问题就等价于求出对。数组所需要的最小操作数。数组所需的最小操作数了。且必有一个差分数组的元素。数组进行差分操作得到。原创 2024-03-08 20:55:43 · 1555 阅读 · 1 评论 -
AcWing 5268.最短距离
如图,1和2的距离为0,但是不属于同一类,此时就可以将这两类合并。这是因为,1和3为同一类,3到1的距离为0,那么3到2的距离就也为0。同理,2类内的每一个点到1类内的每一个点的距离也为0。如果要是两个点的距离为0,那么就说明这两个点属于同一类。假如将所有距离为0的点合并为一个集合,那么就可以用并查集处理。考虑在合并距离为0的点之后利用一次Floyd算法,计算出类与类之间的最短距离。原创 2023-12-04 11:45:47 · 81 阅读 · 0 评论 -
AcWing 1264.动态求连续区间和(树状数组和线段树)
线段树是一种数据结构,它利用了二分的思想,不断地将某一个区间分成两个子区间,直到分成的子区间只有一个元素为止。而传统的前缀和思想是将所有操作执行完之后再求取某个区间的区间和。相比于传统前缀和,树状数组可以边修改数组的元素边查询区间和。而如果使用树状数组或线段树,则时间复杂度为。这里的动态指的是可以在某个位置修改元素的值。线段树可以有多种用途,它可以被用于求。,因此如果使用前缀和,则时间复杂度为。树状数组是一种数据结构,主要是为了。求取某个区间和(前缀和)。用来存储线段树的区间。的最大值,区间的和…原创 2023-11-20 20:36:31 · 91 阅读 · 1 评论 -
AcWing 1241.外卖店优先级
假如我们不每个时刻都衰减没有订单店铺,而是等到该店铺出现订单时,我们再比较他上一次拿到订单的时刻和本时刻的差距,一次性衰减两个时刻内所有没有订单的时刻。是否大于1,如果大于1,那么说明两个时刻之间出现了空,需要进行衰减。,则说明在某一时刻到T时刻之间有没有接到订单的时段,需要进行衰减。的时候都需要枚举每一个订单和店铺。由于我们只枚举每个时刻的订单,因此算法的时间复杂度为。首先用一个结构体存储每一个订单的店铺号和时刻。然后根据订单的时刻和店铺号按从小到大排序。表示第k个店铺上一次接到订单的时刻。原创 2023-11-17 21:27:51 · 60 阅读 · 0 评论 -
AcWing 5271易变数
假设一个二进制数1101,我们可以从它的最高位开始枚举,假如当前位为1,那么这一位就有两种可能,如果为0,就只有1种可能。存储当前这一位之前的所有1的个数,枚举后面所有可能填数的情况,这个时候我们之前算的组合数就用上了。的时候,因为只有1操作0次为1,而且不管n输入多少,区间总会包含1,因此直接输出1即可。假如当前位为1且我们枚举的时候让其为0,那么后面的数我们就可以随便填而不会超过。表示可以随便填的位数,那么整个数的1的个数就是。表示后面可以随便填的数中1的个数,的二进制数中1的个数。原创 2023-11-08 21:35:21 · 64 阅读 · 0 评论 -
AcWing 1212.地宫取宝
应该比最小的宝贝的价值小,也就是比0小。这样如果下一个宝贝的价值为0的话才能取到,否则如果此时。,这样宝物的最小价值就为1,可以让0表示比最小价值还小的值。因此本题可以考虑用一个四重循环的dp解决。,那么下一个宝贝的价值如果为0就取不到。由于-1超过数组的下界,因此对于输入的。时,小明没有取任何宝物,所以此时。这个位置的宝贝和不取的选择。也要有所处理,将其范围变成。的位置,这个时候就有取。原创 2023-11-14 10:32:03 · 127 阅读 · 0 评论 -
AcWing 1214.波动数列
都有可能是负数,而数组下标只能大于等于0,因此在取模的时候要注意是结果必须大于等于0。个操作下,如何组合使得数列之和与。通过以上的分析我们可以知道,当第。时,满足题意的方案只有一种,就是。这其实是一个组合问题,在。,因此本题的时间复杂度差不多。上述左端的式子刚好为考虑。(2)关于初始化的问题,当。假设数列的第一个数为。次操作之后数列的和。原创 2023-11-14 20:56:34 · 95 阅读 · 0 评论 -
AcWing 149.荷马史诗
构成的两种哈夫曼树,可以看出,上面的哈夫曼树的权值明显大于下面的。在k进制中,如果依然按照二进制哈夫曼树的合并规则,先合并最小的k个节点,那么一直合并到了不足k个节点的时候,最后一次合并就会出现缺漏,这时的k叉哈夫曼树就不是最优哈夫曼树。为0,那么也就是说此时我每次合并的时候都能合并k个点,这个时候状态是最好的。题目中要求编码长度最短和最长的编码的长度最短,也就是要求哈夫曼树的权值之和以及最深的深度最短。而且优先队列的排序方式要按照先比较权值,权值小的排前面,权值相同的比较子树的深度。原创 2023-11-15 21:51:23 · 112 阅读 · 1 评论