股票交易
这里尝试利用单调队列优化,这里不好直接用单调队列的原因是因为(以买为例)\(-ap[i]*k_1\)不是只与下标有关(这里下标为\(j-k_1\))的
所以解决方案一:我们将下标变成一个整体,再把后面的代价换掉然后将与下标无关的直接提出去
解决方案二:利用“蚯蚓”那一道题目的思路进行单调队列的维护
提一嘴,这里在某一天买卖股票是因为每股股票会产生利润吧,既然会产生为啥不直接买卖到最大限度呢?这里又没有边际收益递减啥的。。不清楚
类似的:围栏。只不过这道题目不用换元而是直接提取而已
update 2024.7.5
还是看这篇题解吧,注意的就是不要直接认为进行交易的话一定会进行到上限吧(虽然我也不知道为什么进行不到);然后注意单调队列优化的时候,是先将所有维度当成定值看上下界是否同时单调变化,所以我们要像题解这个样子拆开,然后就可以看出是否可以单调队列优化了
update 2024.9.8
比较两种题解的做法,会发现其实本质是一样的,只不过第二种题解是直接将第一种题解的\(j-k_1\)写成了\(x\)(也就是直接进行了换元这步过程),然后就很容易发现单调队列优化
所以无论写成哪种形式,本质上还是要看,对于当前状态\(f[i][j]\),我们发现转移的区间长度是固定的,为\(as[i]\),此时就要考虑单调队列优化,一种不行就换一种写法就好了
一定要牢记,转移区间长度固定考虑单调队列优化;实际上这是单调队列优化最明显的标志,当然不会局限于这个条件,就像蓝书说的,只要上下界同时单调变化就可以考虑单调队列优化