代碼隨想錄算法訓(xùn)練營第五十一天|309.最佳買賣股票時機(jī)含冷凍期、714.買賣股票的最佳時機(jī)含手續(xù)費(fèi)

309.最佳買賣股票時機(jī)含冷凍期

動規(guī)五部曲

確定dp數(shù)組以及下標(biāo)的含義

dp[i][j],第i天狀態(tài)為j,所剩的最多現(xiàn)金為dp[i][j]

狀態(tài)一:持有股票狀態(tài)

狀態(tài)二:保持賣出股票的狀態(tài)

狀態(tài)三:今天賣出股票

狀態(tài)四:今天為冷凍期狀態(tài)

操作一:前一天就是持有股票狀態(tài)(狀態(tài)一),dp[i][0] = dp[i - 1][0]

操作二:今天買入了,有兩種情況

前一天是冷凍期(狀態(tài)四),dp[i - 1][3] - prices[i]

前一天是保持賣出股票的狀態(tài)(狀態(tài)二),dp[i - 1][1] - prices[i]

dp[i][0] = max(dp[i - 1][0], dp[i - 1][3] - prices[i], dp[i - 1][1] - prices[i])

dp[i][1],兩個操作:

操作一:前一天就是狀態(tài)二

操作二:前一天是冷凍期(狀態(tài)四)

dp[i][1] = max(dp[i - 1][1], dp[i - 1][3]);

dp[i][2] = dp[i - 1][0] + prices[i];

dp[i][3] = dp[i - 1][2];

dp數(shù)組初始化

dp[0][0] = -prices[0]

dp[0][1] =0?

dp[0][2]=0

dp[0][3] = 0


intmaxProfit(vector<int>&prices){intn=prices.size();if(n==0)return0;vector<vector<int>>dp(n,vector<int>(4,0));dp[0][0]-=prices[0];// 持股票for(inti=1;i<n;i++){dp[i][0]=max(dp[i-1][0],max(dp[i-1][3]-prices[i],dp[i-1][1]-prices[i]));dp[i][1]=max(dp[i-1][1],dp[i-1][3]);dp[i][2]=dp[i-1][0]+prices[i];dp[i][3]=dp[i-1][2];}returnmax(dp[n-1][3],max(dp[n-1][1],dp[n-1][2]));}

714.買賣股票的最佳時機(jī)含手續(xù)費(fè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] - fee);

intmaxProfit(vector<int>&prices,intfee){intn=prices.size();vector<vector<int>>dp(n,vector<int>(2,0));dp[0][0]-=prices[0];// 持股票for(inti=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]-fee);}returnmax(dp[n-1][0],dp[n-1][1]);}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容