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]);
}
}