class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * 计算最大收益
     * @param prices int整型vector 股票每一天的价格
     * @return int整型
     */
    /*
     dp(i)表示第i天结束后,最多赚dp(i)钱。
     dp(i,0) 表示i天结束后,手中还有0只股票
     dp(i,0) = max(dp(i-1, 1) + price(i), dp(i-1, 0))
     dp(i,0) 表示i天结束后,手中还有1只股票
     dp(i,0) = max(dp(i-1, 0) - prices(i), dp(i-1,1);
    */
    int maxProfit(vector<int>& prices) {
        int len = prices.size();
        if (len == 0 || len == 1) {
            return 0;
        }
        vector<vector<int>>dp(len, vector<int>(2, 0));
        dp[0][0] = 0;
        dp[0][1] = -prices[0];
        for (int i = 1; i < len; i++) {
            dp[i][0] = max(dp[i-1][1] + prices[i], dp[i-1][0]);
            dp[i][1] = max(dp[i-1][0] - prices[i], dp[i-1][1]);
        }
        return dp[len-1][0];
        
    }
};