题目链接: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])。
时间: 2024-10-07 08:09:32