比之前的I题【LeetCode121】买卖股票的最佳时机(附dp总结图)多了条件:可以多次买卖,但不能同时参与多笔交易。
——因此区别就是:
d p [ i ] [ 1 ] dp[i][1] dp[i][1]即第i天持股时的状态,2种可能情况:
1)前一天持股。
2)前一天不持股,即今天买了股票(现金数减少prices[i]),由于整个过程只交易一次,所以今天是整个过程的第一次买股票,即第i
天的现金数为 d p [ i − 1 ] [ 0 ] − p r i c e s [ i ] dp[i-1][0]-prices[i] dp[i−1][0]−prices[i],所以 d p [ i ] [ 1 ] = m a x ( d p [ i − 1 ] [ 1 ] , d p [ i − 1 ] [ 0 ] − p r i c e s [ i ] ) dp[i][1]=max(dp[i-1][1],dp[i-1][0]-prices[i]) dp[i][1]=max(dp[i−1][1],dp[i−1][0]−prices[i])。
class Solution {
public:
int maxProfit(vector<int>& prices) {
int n=prices.size();
if(n==0||n==1){
return 0;
}
vector<vector<int>>dp(n,vector<int>(2));
dp[0][0]=0;
dp[0][1]=0-prices[0];
for(int i=1;i<n;i++){
dp[i][0]=max(dp[i-1][0],dp[i-1][1]+prices[i]);
dp[i][1]=max(dp[i-1][1],dp[i-1][0]-prices[i]);
}
return dp[n-1][0];//最后一天结束不持股
}
};