[BZOJ4709]柠檬(动态规划,单调栈) 题面 BZOJ 题解 从左取和从右取没有区别,本质上就是要分段. 设\(f[i]\)表示前\(i\)个位置的最大值. 那么相当于我们枚举一个前面的位置\(j\),然后找到这一段中最大的\(s_0t^2\) 但是这样子很不优秀. 我们贪心的思考一下,既然这一段最后加起来只能变成某一个\(s_0\), 那么,我们这一段开头和结尾都一定要是\(s_0\), 否则我们把结尾那些不等于\(s_0\)的单独分开一段, 这样子的答案一定不会更差,前缀同理. 因此每…