import java.util.*;

//该题与打家劫舍类似,可以通过考虑当天持股还是不持股,来分别考虑
public class Solution {
   //dp[i][0] 表示在第i天不持股的最大收益
   //dp[i][1]表示在i天持股的最大收益
    public int maxProfit (int[] prices) {
        // 多次买入卖出,再次买入前先卖出
        int n = prices.length;
        int[][] dp = new int[n][2];
        //1.初始化
        dp[0][0] = 0;
        dp[0][1] = -prices[0];

        //1.当天不持股可能是当天卖出了股票或者是之前卖出了股票
        //2.当天持股可能是前几天买的还没卖出,或者是当天买入

        //2.填表 ,1.当天持股时此时最大收益为前一天持股还是前一天不持股的最大值
        //2.当天不持股时,此时为前一天持股还是不持股的最大收益
        for(int i=1;i<n;i++){
            //不持股
            dp[i][0] = Math.max(dp[i-1][0],dp[i-1][1] +prices[i]);
            //持股
            dp[i][1] = Math.max(dp[i-1][1],dp[i-1][0] -prices[i]);
        }


        return Math.max(dp[n-1][0],dp[n-1][1]);
    }
}