题解:qoj9737 Let's Go! New Adventure
题意:给定序列 \(a\) 和不降序列 \(b\) 和常数 \(c\),定义 \(f(l,r) = \max\{p|\sum_{i=l} ^r a_i \ge \sum_{i=1}^p b_i\} - c\),求将序列 \(a\) 分成若干段后每段 \(f\) 之和的最大值。
做法:
一般来说序列分段的问题都需要决策单调性,但是这个题直接做是不具有单调性的,感性理解为什么 \(f\) 不满足四边形不等式,因为你区间更长的时候增速只会更慢,所以 \(f(l-1,r+1)-f(l-1,r) \ge f(l, r + 1) - f(l, r)\) 这个式子是不会成立的,当然更严谨的说明是因为 \(f\) 并不是光滑的,所以直接上决策单调性是不可以的。
我们考虑给这个函数进行一定的改造使得他是光滑的并且有凸性,考虑这样一个函数 \(g(l,r) = \max\{p|\sum_{i=l} ^r a_i \ge \sum_{i=1}^p b_i\} - c + \frac{\sum_{i=l} ^r a_i - \sum_{i=1}^p b_i}{b_{p+1}}\)。因为是不降序列 \(b\),所以 \(b_{p+1}\) 随着 \(\sum_{i=l}^{r}a_i\) 增大而增大,后面多加的东西的东西的增速就会放缓,且一定 \(<1\),所以就会有凸性,对这个函数去做决策单调性就可以了。

浙公网安备 33010602011771号