详细思路

具有某种转移
 
精确定义
dpij   第i天0无股票1有股票的最大利润,dp0是空dp1是第一天
 
转移
7 1 5 3 6 4 
dp i 0=max(dp i-1 0,dp i-1 1 +val)
dp i 1=max(dp i-1 1,dp i-1 0 -val)
 
初始化
dp0 0=0;dp01=INT_MIN
class Solution {
public:
    int maxProfit(vector<int>& prices) {
        int n=prices.size();
        vector<vector<int>>dp(n+1,vector<int>(2,-0x3f3f3f3f));
        dp[0][0]=0;
        for(int i=1;i<=n;i++){
            dp[i][0]=max(dp[i-1][0],dp[i-1][1]+prices[i-1]);
            dp[i][1]=max(dp[i-1][1],dp[i-1][0]-prices[i-1]);
        }
        return dp[n][0];
    }
};

状态压缩,只需要i i-1,一维取余2

class Solution {
public:
    int maxProfit(vector<int>& prices) {
        int n=prices.size();
        vector<vector<int>>dp(2,vector<int>(2,-0x3f3f3f3f));
        dp[0][0]=0;
        for(int i=1;i<=n;i++){
            dp[i%2][0]=max(dp[(i-1)%2][0],dp[(i-1)%2][1]+prices[i-1]);
            dp[i%2][1]=max(dp[(i-1)%2][1],dp[(i-1)%2][0]-prices[i-1]);
        }
        return dp[n%2][0];
    }
};

 

posted on 2021-08-02 17:28  offer快到碗里来~  阅读(27)  评论(0)    收藏  举报