Leetcode #188 Best Time to Buy and Sell Stock IV

题目链接:https://leetcode.com/problems/best-time-to-buy-and-sell-stock-iv/

 

当 k ≥ prices.size() / 2 时:题目等价于 k 无限大的情形。

当 k < prices.size() / 2 时:

用dp[m][n+1]表示在[0,n]区间,进行了m次买卖操作,获得的最大利润。

 

那么这个利润必为以下几个数据的最大值:

  • dp[m-1][n+1],即在[0,n]区间,进行了m-1次买卖操作,获得的最大利润。
  • dp[m][n],即在[0,n-1]区间,进行了m次买卖操作,获得的最大利润。

    或者是

  • max(dp[m-1][z] + (prices[n] - prices[z]) ),即在[0,z-1]区间,进行了m-1次买卖操作,并且在z时刻进行最后一次买入,在n时刻进行最后一次卖出,获得的最大利润。

而每次循环时n的值是固定的,z < n 的值在不断更新,所以改写为 prices[n] + max(dp[m-1][z] - prices[z])。

posted @ 2015-04-05 22:07  meowcherry  阅读(127)  评论(0编辑  收藏  举报