思路
动态规划+单调队列好题。
先考虑使用线性dp。令表示前头奶牛能得到的最大效率。在第头奶牛,一定在区间内有奶牛得休息。在区间内枚举休息的奶牛,则
其中表示前缀和,即奶牛区间的效率和,为奶牛区间的效率和。答案为。这个方程还是比较容易的吧。
于是我们写出代码,发现只有60分。2个WA,2个TLE。
1 | 60分 |
为什么会T呢?因为达到了。显然层循环会TLE。
我们再仔细思考一下,发现如果想要尽可能大,不就是想让尽可能大吗?
那我们把方程变形,得:
此时。
即把放到外面,这样保证了想让尽可能大,就只和有关系了,即内的值只和有关。现在只需要用单调队列维护就好了。
按照这个思路,还是60。。WA4个点,发现这题要开long long。。不开long long见祖宗啊。
1 | #include <stdio.h> |