P2569 题解
题意简述
你有 \(T\) 天的时间允许你投资.
对于 \(i \in [1,T]\) 你买入价为 \(AP_i\) ,出手价 \(BP_i\).我们保证对于任意一天,当天的买入价大于卖出价.
同时,对于\(i \in [1,T]\), 你至多买入\(AS_i\)股,至多卖出\(BS_i\)股.
同时,我们规定,对于两次交易,中间至少间隔\(W\)天,
同时,在任何时刻,你持有的股票总数不能超过 \(MaxP\)
思考
显然,我们动态规划
显然,我们有一个维度代表这是第几天.
显然我们有一个维度是要存储手上拿了几个股票的.
显然,由于我们保证对于任意一天,当天的买入价大于卖出价. 因此,一天我们要么买入,要么卖出.
我们考虑转移方程
买入
\[dp[t][p]=\max_{i \in [1,t-w-1],j \in [0,p]}dp[i][j]-(p-j)AP_i
\]
\[dp[t][p]=\max_{i \in [1,t-w-1],j \in [0,p]}dp[i][j]-pAP_i+jAP_i
\]
\[dp[t][p]=-pAP_i+\max_{i \in [1,t-w-1],j \in [0,p]}dp[i][j]+jAP_i
\]
卖出
\[dp[t][p]=\max_{i \in [1,t-w-1],j \in [0,p]}dp[i][j]+(j-p)BP_i
\]
\[dp[t][p]=\max_{i \in [1,t-w-1],j \in [0,p]}dp[i][j]-pAP_i+jBP_i
\]
\[dp[t][p]=-pAP_i+\max_{i \in [1,t-w-1],j \in [0,p]}dp[i][j]-jBP_i
\]
现在问题是我们怎么优化后面的\(\max\)的部分
我们有trick 在动态规划时,我们可以利用辅助的动态规划数组来优化转移
我们的瓶颈在两处,一个是枚举\(i \in [1,t-w-1]\),一个是枚举\(j\)也就是上一个状态的持有股票数量
我们考虑优化.
对于第一各瓶颈,我们可以把\(dp[i]\)的语义从第\(i\)各改为前\(i\)个
那么状态转移方程就变成了
买入:
\[dp[t][p]=-pAP_i+\max_{j \in [0,p]}dp[t-w-1][j]+jAP_i
\]
我们发现,对于确定的\(i,j\),我们对于\(dp[t-w-1][j]+jAP_i\)是确定的.
我们可以对一一个\(i\),然后对于每个\(j\),提前计算出\(A[j]=dp[t-w-1][j]+jAP_i\)
然后我们就可以把枚举前驱的\(j\)转化为\(A\)的区间最值问题.
这可以使用单调队列优化
卖出同理

浙公网安备 33010602011771号