【Day55】代碼隨想錄之動態規劃_買賣股票含冷凍期和手續費

文章目錄

      • 動態規劃理論基礎
        • 動規五部曲:
        • 出現結果不正確:
      • 1. 最佳買賣股票的時機含冷凍期
      • 2. 買賣股票的最佳時機含手續費

動態規劃理論基礎

動規五部曲:
  1. 確定dp數組 下標及dp[i] 的含義。
  2. 遞推公式:比如斐波那契數列 dp[i] = dp[i-1] + dp[i-2]。
  3. 初始化dp數組。
  4. 確定遍歷順序:從前到后or其他。
  5. 打印。
出現結果不正確:
  1. 打印dp日志和自己想的一樣:遞推公式、初始化或者遍歷順序出錯。
  2. 打印dp日志和自己想的不一樣:代碼實現細節出現問題。

1. 最佳買賣股票的時機含冷凍期

參考文檔:代碼隨想錄

分析:
加入冷凍期的概念,如果當前賣出了會有一天的冷凍期,這一天不能買入股票,所以節點的狀態增加為 持有 當場賣出 冷凍期 和 賣出狀態 四種。賣出狀態是說明可以持有股票了。
遞推公式:

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

代碼:

class Solution {
public:int maxProfit(vector<int>& prices) {//比較重要的是狀態的細分vector<vector<int>> dp(prices.size(), vector<int>(4, 0));dp[0][0] = -prices[0];//持有dp[0][1] = 0;//當天賣出dp[0][2] = 0;//冷凍期dp[0][3] = 0;//賣出狀態for(int i = 1; i < prices.size(); i++){dp[i][0] = max(dp[i-1][0], max(dp[i-1][2]-prices[i], dp[i-1][3]-prices[i]));dp[i][1] = dp[i-1][0] + prices[i];dp[i][2] = dp[i-1][1];dp[i][3] = max(dp[i-1][3], dp[i-1][2]);}return max(max(dp[prices.size()-1][0],dp[prices.size()-1][1]),max(dp[prices.size()-1][2], dp[prices.size()-1][3]));}
};

2. 買賣股票的最佳時機含手續費

參考文檔:代碼隨想錄

分析:
手續費什么是否付呢?需要賣出的時候就要付了。每個節點的狀態有兩個,持有和不持有手里的錢。
遞推公式:

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);

代碼:

class Solution {
public:int maxProfit(vector<int>& prices, int fee) {vector<vector<int>> dp(prices.size(), vector<int>(2,0));dp[0][0] = -prices[0];dp[0][1] = 0;for(int i = 1; i < prices.size(); 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);}return max(0,max(dp[prices.size()-1][1], dp[prices.size()-1][0]));}
};

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/696731.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/696731.shtml
英文地址,請注明出處:http://en.pswp.cn/news/696731.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【Elasticsearch專欄 01】深入探索:Elasticsearch的正向索引和倒排索引是什么

文章目錄 什么是Elasticsearch的正向索引和倒排索引&#xff1f;1.倒排索引&#xff08;Inverted Index&#xff09;2.正向索引&#xff08;Forward Index&#xff09;3.小結 什么是Elasticsearch的正向索引和倒排索引&#xff1f; 首先&#xff0c;要明確的是&#xff0c;Ela…

leetcode:78.子集

1.樹形結構&#xff1a;往后依次取該數字往后的數字&#xff08;前面的不要取&#xff0c;否則子集會重復&#xff09;&#xff1b;每一層遞歸的結果都要放入結果集&#xff0c;而并非只放葉子節點。 代碼實現&#xff1a; #達到了葉子節點&#xff08;終止條件&#xff09; …

抖音百科詞條創建在哪里?

抖音百科就是頭條百科&#xff0c;頭條百科是一個在線百科全書平臺&#xff0c;用戶可以在上面創建、編輯和瀏覽各種百科詞條。頭條百科詞條可以被抖音抓取到&#xff0c;從而獲得更多流量和曝光&#xff0c;所以當你創建一個抖音百科詞條的時候&#xff0c;就能更加提高自身的…

logbak日志單獨打印(方法層級)

logbak日志單獨打印 問題 前幾天朋友在群里問&#xff0c;怎么針對方法打印打印日志&#xff0c;不是針對類。 解決辦法 方法層 GetMapping("getLog1")public String getLog1(){Logger specialLogger LoggerFactory.getLogger(TestController.class.getName() …

人工智能_CPU安裝運行ChatGLM大模型_ChatGlm-6B_啟動命令行對話_安裝API調用接口_005---人工智能工作筆記0100

然后我們再進入 /data/module/ChatGLM-6B-main文件夾 然后我們去啟動,命令行工具 python3 cli_demo.py 可以看到也是可以用了. 正常可以用了. 然后主要來看,如何使用api來調用呢,這樣才可以,做自己的界面 可以看到就非常簡單了只需要: 走到 /data/module/

9-1 A. 圖綜合練習--構建鄰接表

題目描述 已知一有向圖&#xff0c;構建該圖對應的鄰接表。 鄰接表包含數組和單鏈表兩種數據結構&#xff0c;其中每個數組元素也是單鏈表的頭結點&#xff0c;數組元素包含兩個屬性&#xff0c;屬性一是頂點編號info&#xff0c;屬性二是指針域next指向與它相連的頂點信息。 單…

即時設計和sketch對比

在設計領域&#xff0c;有很多易于使用的設計軟件&#xff0c;每個軟件都有自己的特點&#xff0c;但在使用中也會有一些限制。例如&#xff0c;傳統的Sketch。Sketch是一款古老的UI設計軟件。自2010年推出以來&#xff0c;已有10多年的歷史&#xff0c;但它始終僅限于MAC。到目…

深入理解Spring Boot Starter:概念、特點、場景、原理及自定義starter

這是目錄 **一、引言****二、Spring Boot Starter基本概念****三、Spring Boot Starter的主要特點****四、Spring Boot Starter的應用場景****五、Spring Boot Starter的實現原理****六、自定義spring boot starter****為什么要創建自定義Starter&#xff1f;****創建自定義Spr…

【JS逆向學習】同花順(q.10jqka)補環境

逆向目標 目標網址&#xff1a;https://q.10jqka.com.cn/ 目標接口&#xff1a; https://q.10jqka.com.cn/index/index/board/all/field/zdf/order/desc/page/3/ajax/1/ 目標參數&#xff1a;cookie 逆向過程 老規矩&#xff0c;先分析網絡請求&#xff0c;發現是 cookie 加…

matlab代碼--基于matlabLDPC-和積譯碼系統

LDPC編碼 一個碼長為n、信息位個數為k的線性分組碼&#xff08;n,k&#xff09;可以由一個生成矩陣 來定義&#xff0c;信息序列 通過G被映射到碼字XS.G。線性分組碼也可以由一個校驗矩陣 來描述。所以碼字均滿足 。校驗矩陣的每一行表示一個校驗約束 &#xff0c;其中所有的非…

一文吃透計算機網絡面試八股文

面試網站&#xff1a;topjavaer.cn 目錄&#xff1a; 網絡分層結構三次握手兩次握手可以嗎&#xff1f;四次揮手第四次揮手為什么要等待2MSL&#xff1f;為什么是四次揮手&#xff1f;TCP有哪些特點&#xff1f;說說TCP報文首部有哪些字段&#xff0c;其作用又分別是什么&…

Autochip rtos videoin enqueuedequeue

vBackcarMainTask 目錄 xBCModulesInit 初始化videoin xVideoinHwInit 初始創建mipi 初始化線程 vis_init 初始化g_vis_ctrl 配置mipi 初始化參數 xVideoinFillParam獲取sensor驅動配置的分辨率 xVideoinHwGetInfo 配置分辨率 vendor/autochips/proprietary/tinysys/vis…

python第七節:條件、循環語句(1)

條件語句 語法&#xff1a; 基本語法1&#xff1a; if 判斷條件&#xff1a; 執行語句…… else&#xff1a; 執行語句…… 基本語法2&#xff1a; if 判斷條件1: 執行語句1…… elif 判斷條件2: 執行語句2…… elif 判斷條件3: 執行語句3…… else: 執行語句4…… 如何…

電阻知識詳解

基本介紹 電阻阻礙電流流動&#xff1a;只要有電流流過電阻&#xff0c;就會產生功率損耗 基本單位&#xff1a;歐姆&#xff0c;Ω 換算單位&#xff1a;微歐&#xff08;uΩ&#xff09;、毫歐&#xff08;mΩ&#xff09;、千歐&#xff08;kΩ&#xff09;、兆歐&#x…

Python在生物信息學中的應用:序列化Python對象

我們需要將Python對象序列化為字節流&#xff0c;這樣就可以將其保存到文件中、存儲到數據庫中或者通過網絡連接進行傳輸。 解決方案 序列化最普遍的做法是使用 pickle 模塊。為了將一個對象保存到一個文件中&#xff0c;可以這樣做&#xff1a; import pickledata ... # Some…

字典樹相關例題題解

一.P2580 于是他錯誤的點名開始了 這道題也類似于模版題&#xff0c;只要我們熟悉插入和查找的過程&#xff0c;一樣可以解決&#xff0c;這里只要注意一下第一次出現和其它次出現所輸出是不一樣的&#xff0c;這里我們只要在查找函數中返回不同的值&#xff0c;這樣就可以解決…

GEE案例——計算趕著大米、棉花和小麥等農作物的氨氣排放量(含風速計算)

簡介 氨氣是一種在農業生產中廣泛存在的氣體,主要是由肥料和畜禽糞便的分解過程中釋放出來的。氨氣對環境和生物健康造成了負面影響,所以準確計算農作物的氨氣排放量非常重要。下面是一個關于如何計算趕著大米、棉花和小麥等農作物的氨氣排放量的文檔,希望對你有幫助。 第…

MySQL優化之SQL優化詳解

(/≧▽≦)/~┴┴ 嗨~我叫小奧 ??? &#x1f440;&#x1f440;&#x1f440; 個人博客&#xff1a;小奧的博客 &#x1f44d;&#x1f44d;&#x1f44d;&#xff1a;個人CSDN ??????&#xff1a;傳送門 &#x1f379; 本人24應屆生一枚&#xff0c;技術和水平有限&am…

Laravel01 課程介紹以及Laravel環境搭建

Laravel01 課程介紹 1. Laravel2. mac開發環境搭建(通過Homebrew)3. 創建一個項目 1. Laravel 公司中面臨著PHP項目與Java項目并行&#xff0c;所以需要我寫PHP的項目&#xff0c;公司用的框架就是Laravel&#xff0c;所以在B站上找了一門課學習。 Laravel中文文檔地址 https…

leetcode hot 100最后一塊石頭重量Ⅱ

在本題中&#xff0c;我們可以知道&#xff0c;是要求最后石頭返還的重量&#xff0c;也就是&#xff0c;將整個數組分割成兩個子集&#xff0c;求讓兩個子集的差值最小。這和上一道分割整數集類似&#xff0c;只是需要我們返回差值。所以我們采用動態規劃01背包來做&#xff0…