您将获得一组天的股票价格。每天,您可以购买一个单位的股票,出售已经购买的任何数量的股票单位,或者什么也不做。通过最佳规划您的交易策略可以获得的最大利润是多少?
现在答案可以通过单程获得,但如果必须通过动态编程解决该问题。那么问题的复发关系是什么?
我认为,任何一天OPT(i)
都可以表示到目前为止赚取的最大利润,因此必须在最后一天卖掉所有剩余的股票,所以
OPT(i) = max (
Sell all on this day bought from day j to day i + OPT(j-1),
OPT(i-1) + do nothing)?
这是对的吗?
答案 0 :(得分:2)
我认为你可以这样解决:
dp [i] [j]表示您在持有j单位股票时获得的最大利润。
然后
dp[i][j] = max(dp[i-1][j-1] - cost, //buy one unit
dp[i-1][j], // do nothing
dp[i-1][j+1] + profit // sold one unit
dp[i-1][j+2] + 2*profit //sold two units
...
)
然后找到dp [N] [j]的最大值(0 <= j <= MAX)
时间是(number_of_days * total_stock_you_can_buy ^ 2)