class Solution {
    //动态规划
    //动态规划四部曲:确定dp[]数组及下标对应的含义,递推公式、初始化、遍历顺序
    // 三种状态: 持有股票,不持有股票并且处于冷冻期,不持有股票并且不处于冷冻期对应dp[i][0],dp[i][1],dp[i][2];
    //  递推公式:dp[i][0] = dp[i-1][2] - prices[0];
    // dp[i][1] = dp[i][0] + prices[i] dp[i][2] = dp[i-1][1];
    public int maxProfit(int[] prices) {
       int n = prices.length;
       int[][] dp = new int[n][3];
       dp[0][0] = -prices[0];
       dp[0][1] = 0; dp[0][2] = 0;
       for (int i = 1; i < prices.length; i++) {
        dp[i][0] = Math.max(dp[i-1][0], dp[i-1][2] - prices[i]);
        dp[i][1] = dp[i-1][0] + prices[i];
        dp[i][2] = Math.max(dp[i-1][2], dp[i-1][1]);
       }
       return Math.max(dp[n-1][1],dp[n-1][2]);
        
    }
}