參考LeetCode團(tuán)滅買賣股票系列
DP[i][j][k]:? i:天數(shù)? ?j: 交易次數(shù) k: 持有或不持有股票, 定義: 當(dāng)?shù)趇天交易j次后持有或不持有股票最賺錢的情況
不持有股票: DP[i][j][0] = max(dp[i - 1][j][0], dp[i - 1][j][1] + price[i]);
沒有持有股票休雌,兩種可能,昨天沒持有股票,今天不買 / 昨天持有股票顷扩,今天賣出股票
持有股票:DP[i][j][1] = max(dp[i - 1][j][1], dp[i - 1][j - 1][0] - price[i]);
兩種可能且轨,昨天持有股票,沒有賣/昨天沒有持有股票,今天買
四個(gè)Base Case:
dp[-1][k][0] = 0
解釋:因?yàn)?i 是從 0 開始的寞奸,所以 i = -1 意味著還沒有開始寓落,這時(shí)候的利潤(rùn)當(dāng)然是 0 括丁。
dp[-1][k][1] = -infinity
解釋:還沒開始的時(shí)候,是不可能持有股票的伶选,用負(fù)無窮表示這種不可能史飞。
dp[i][0][0] = 0
解釋:因?yàn)?k 是從 1 開始的,所以 k = 0 意味著根本不允許交易仰税,這時(shí)候利潤(rùn)當(dāng)然是 0 构资。
dp[i][0][1] = -infinity
解釋:不允許交易的情況下,是不可能持有股票的陨簇,用負(fù)無窮表示這種不可能吐绵。
從中可以推算出六題全部的做法