思路:
这次只有2种状态:
i)不持股(0)
ii)持股(1)
不像121题,还要考虑是卖出的不持股还是本来就不持股。这道题因为有多次交易,就不用考虑一次都没有的不持股情况
代码:
class Solution {
public int maxProfit(int[] prices) {
int n=prices.length;
int[][] dp=new int[n][2];
if(n<2) return 0;
//状态转移方程
//不持股(0)
//持股(1)
//初始化
dp[0][0]=0;
dp[0][1]=-prices[0];
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 dp[n-1][0];
}
}
分解:
1)是第一种dp形式,当前值只与前1个结果有关
区间规划
状态转移方程:
i)不持股(0)
ii)持股(1)
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]);
2)这道题只有2种状态,比121题简单