题意
一个有n个数的环,每次循环走k步,走到每个点都有具体的权值,问在任意点出发最多走m步的情况下,一开始需要拥有多少价值才能使最终总价值不少于s。
分析
对于一个环,固定步数下是有循环节的,不同循环节内的节点各不相同,根据裴蜀定理可得每个循环节的长度为 n / gcd(n, k),所以共有 gcd(n, k) 个循环节。
暴力把这些循环节找出来。
对于每个循环节,假设循环节长度为sz
①m%sz==0
此时能走整个周期,但是为了最后的值最大,先走m/sz-1圈,最后一拳走最大的一段,即求长度最大为sz的最大子段和。因为整个周期的值可能为负,所以取max(sum,0)
②m%sz≠0
这个情况下走完整数周期后还剩下m%sz步,同理,求长度最大为m%sz的最大子段和。
最后,两者取最优。
至于求最大子段和,则用单调队列来处理。
#include #include #include #include #include #include #include #include #include #include #include