通过DP最大化给定库存数据的利润

时间:2014-11-14 09:27:53

标签: algorithm recursion dynamic-programming

您将获得一组天的股票价格。每天,您可以购买一个单位的股票,出售已经购买的任何数量的股票单位,或者什么也不做。通过最佳规划您的交易策略可以获得的最大利润是多少?

现在答案可以通过单程获得,但如果必须通过动态编程解决该问题。那么问题的复发关系是什么?

我认为,任何一天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)?

这是对的吗?

1 个答案:

答案 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)