思路:
2种状态
i)不持股(0)
ii)持股(1)
代码:
class Solution {
public int maxProfit(int[] prices) {
int n=prices.length;
if(n<2) return 0;
int[][] dp=new int[n][3];
dp[0][0]=0;//不持股,无操作
dp[0][1]=-prices[0];//持股
dp[0][2]=Integer.MIN_VALUE;//不持股,已卖出
//只能从0到1,不能从2到1
for(int i=1;i<n;i++){
dp[i][0]=0;
dp[i][1]=Math.max(dp[i-1][1],-prices[i]);
dp[i][2]=Math.max(dp[i-1][2],dp[i][1]+prices[i]);
}
return Math.max(dp[n-1][0],dp[n-1][2]);
}
}
分解:
状态转移方程:
dp[i][0]=0;
dp[i][1]=Math.max(dp[i-1][1],-prices[i]);
dp[i][2]=Math.max(dp[i-1][2],dp[i][1]+prices[i]);