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\)的区间最值问题.

这可以使用单调队列优化

卖出同理

posted @ 2026-10-03 21:27  txp2025  阅读(3)  评论(0)    收藏  举报