其他分享
首页 > 其他分享> > 买卖股票的最佳时机

买卖股票的最佳时机

作者:互联网

 

思路分析 : 

dp[i][j][0] 表示到第 i 天,交易了 k 支股票,并且手上未持股的最大收益

dp[i][j][1] 表示到第 j 天,交易了 k 支股票,并且手上持股的最大收益

代码分析 :

class Solution {
public:
    int maxProfit(int k, vector<int>& prices) {
        int dp[1005][105][2];
        memset(dp, 0, sizeof(dp));
        int n = prices.size();
        dp[0][0][0] = 0; dp[0][0][1] = -999999;
        // printf("n = %d \n", n);
        prices.push_back(0);
        for(int i = n; i > 0; i--) prices[i] = prices[i-1];
        for(int i = 1; i <= n; i++) {
            dp[i][0][0] = 0;
            dp[i][0][1] = max(-prices[i], dp[i-1][0][1]);
        } 
        for(int i = 1; i <= k; i++) dp[0][i][0] = dp[0][i][1] = -9999999;

        for(int i = 1; i <= n; i++){
            for(int j = 1; j <= k; j++){
                dp[i][j][0] = max(dp[i-1][j-1][1]+prices[i], dp[i-1][j][0]);
                dp[i][j][1] = max(dp[i-1][j][0]-prices[i], dp[i-1][j][1]); 
            }
        }
    
        int ans = 0;
        for(int i = 1; i <= k; i++){
            ans = max(ans, dp[n][i][0]);
            // ans = max(ans, dp[n][i][1]);
        }
        return ans;
    }
};

  

 

标签:持股,买卖,int,股票,最佳时机,手上,prices,dp
来源: https://www.cnblogs.com/ccut-ry/p/15535745.html