![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法竞赛进阶指南
skyang.
这个作者很懒,什么都没留下…
展开
-
Acwing346. 走廊泼水节
思路:对于每条边,有两个顶点u、v,分别属于两个集合(假设集合内部点已经完成全连接),那么将这两个集合连接起来,需要连接s[u]*s[v]-1条边(s[i]代表i所在集合 点的数量),且这些边的最小值为(u--v边权)w+1。倘若有其他方案或更优方案,那么在上述连接过程中,在连接集合u和集合v时,一定会有一条边小于w+1,那么在选取最小生成树时,选这条生成的边而不选初始的边也可以获得 最优/更优解,这与题意不符,因此可以确保取到最小。连接顺序:将所有边按照边权大小从小到大排序。2.为什么可以确保取到最小?原创 2023-06-19 09:46:24 · 383 阅读 · 0 评论 -
Acwing128. 编辑器
思路:分别用两个栈,记录光标左边的数和光标右边的数;用s记录前缀和,f记录最大前缀。对于前k个数的最大前缀,可能等于前k-1个数的最大前缀 或者 前k个数的和。即:f[k]=max(f[k-1],s[k])3.光标左移:将L栈的顶部元素push到R栈。4.光标右移:将R栈的顶部元素push到L栈。2.删除操作:删除L栈的顶部元素。1.插入操作:将x插入到L栈中。5.查询操作:输出f[k]原创 2023-06-19 09:21:13 · 476 阅读 · 0 评论 -
Acwing167. 木棒
1.拼的木棍条数越多,每条木棍的长度越短,且最多可以拼成n条木棍(即每根木条一样长)。3.如果拼当前木棍时,放入长度为fail的木条没有拼成功,那么就不要再对长度为fail的木棍进行搜索。2.如果当前搜索拼成木棍的条数已经超过期望的条数,return false;2.如果这条木棍拼好了,但剩余的木条无法拼成木棍,return false;同小猫过河,每次选一根短木条,放在前面没有拼好的木棍中,或者新开一条木棍。对所有木条遍历,先拼好一根木棍,再拼下一条木棍。4.对木条从大到小排序,先放长度大的木条。原创 2023-05-22 18:21:33 · 73 阅读 · 0 评论 -
Acwing166. 数独
每次填数时,先选取一个可选数字最少的位置填,这样可以为其他选择多的位置增加约束,以减少搜索次数。这里也是用一个二进制数来表示,有多少个数是可以选的,如果第i个位置为1,那么 i 可以被选。1.行约束、2.列约束、3.九宫格约束。原创 2023-05-22 18:10:12 · 64 阅读 · 0 评论 -
Acwing165. 小猫爬山
1、从1~cnt辆车中,选择一辆将它放进去不会超重的车放进去;1、如果当前开的车比最优解多了 return;2、将小猫从大到小排序,先放重量大的。2、新开一辆车将它放进去。原创 2023-05-22 18:02:40 · 56 阅读 · 0 评论 -
Acwing164. 可达性统计
思路:先对所有结点做一个拓扑排序,入度为0的结点(即最靠后)肯定只能到达自己,因此从后向前遍历,每个结点可以到达的结点就是他自己+他的后继可以到达的结点,这里用一个二进制数f表示一个点可以到达哪些结点,第i位为1代表可以到达第i个结点。所以只需将所有后继结点的f值异或起来,就可以得到该结点可以到达哪些结点。标签:拓扑排序+位运算。原创 2023-05-22 17:59:53 · 51 阅读 · 0 评论 -
101. 最高的牛
注意点:有数据点有重复相望的牛,如果对重复的数据都进行操作的话,就会导致他俩中间的牛最大高度会被多减去一个1,因此在操作前要先判重。当得到一组牛可以相望时,可以将他俩中间的牛的高度都减去1,这样就可以保证他俩可以相望。可以先假设,所有牛都一样高。利用差分数组可以很好计算。原创 2023-02-21 22:47:18 · 196 阅读 · 1 评论 -
100. 增减序列
最终数组的方案数可以这样理解,前几次操作要尽量挑选一对bi(一个为正,一个为负),剩下多于的(可能为正,可能为负),可以将多于的与b1配对操作一次,也可以不与b1配对自成一组操作一次,所以,b1可能被操作的次数为0~abs(pos-neg) (多于数的和)现在的目标为将 b2 ~ bn 都变为0 , 每次操作可以任选两个数 ,一个数 + 1 ,另一个数 -1;将所有小于0的bi 转化为0 的最小操作次数为他们的和的相反数。因此将所有大于0的bi 转化为0 的最小操作次数为他们的和。原创 2023-02-21 22:44:05 · 65 阅读 · 0 评论 -
97. 约数之和
【代码】97. 约数之和。原创 2023-02-21 22:34:40 · 59 阅读 · 0 评论 -
95. 费解的开关
思路:先学习黑白迭代游戏玩法,先枚举按第一行的所有情况,然后当上一行有没有点亮的灯时,一定要按这个灯正下方的灯;反之,如果这行的某个灯正上方的灯已经点亮,那么一定不能按这个灯,否则上面的灯就会熄灭,且在以后的操作中无法再次被点亮。因此枚举第一行turn的所有情况,然后模拟后四行,判断最终有没有将所有灯都点亮,若点亮,则判断是否需要更新最小次数;原创 2023-02-21 22:19:15 · 64 阅读 · 0 评论