详细思路

只能买一次
 
精确定义
dpi j第i天,0无股票1有股票,利润最大,dp0是空,dp1是第一天
 
转移
7 1 5 3 6 4  
dp i 0=max(dp i-1 0,   dp i-1 1 +val )    dpi 1=max(dpi-1 1, -val)
 
初始化
踩过的坑
只能买一次,所以dpi 1不能从dpi 0过来,否则会多次,而要从-val过来
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],-prices[i-1]);
        }
        return dp[n][0];
    }
};
详细思路
状态压缩,把所有i变为i%2,因为只需要i  i-1  不需要i-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],-prices[i-1]);
        }
        return dp[n%2][0];
    }
};

 

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