Leetcode_188. 买卖股票的最佳时机 IV

只能买卖k次,和上一题一样的dp方式,但是当k大于n的一半时,就相当于无限次交易了,这个是没有想到的....

code

class Solution {
public:
    int dp[100005][2];
    int maxProfit(int k,vector<int>& prices) {
        int n=prices.size();  
        int ans=0;
        if(k>2*n){
            return maxProfit(prices);
        }
        for(int i=1;i<=k;i++){
            dp[i][0]=-0x3f3f3f3f;
            dp[i][1]=0;
        }
        for(int i=0;i<n;i++){
            for(int j=1;j<=k;j++){
                dp[j][0]=max(dp[j][0],dp[j-1][1]-prices[i]);
                dp[j][1]=max(dp[j][1],dp[j][0]+prices[i]);
                cout << dp[j][0] <<" " <<dp[j][1] <<"
";
                ans=max(ans,dp[j][1]);
            }
        }
        return ans;
    }
    int maxProfit(vector<int>& prices) {
        int n=prices.size();
        int ans=0;
        for(int i=1;i<n;i++){
            int c=prices[i]-prices[i-1];
            if(c>0){
                ans+=c;
            }
        }
        return ans;
    }
};
原文地址:https://www.cnblogs.com/zxcoder/p/12573130.html