【總結】動態規劃

線性dp

LeetCode題單, 從記憶化搜索到遞推
Pre:
從最初狀態到最終狀態等價,那么從最終狀態開始和最初狀態開始結果一樣。
遞歸時不會產生其他負面結果,即無論何時進入遞歸,只要遞歸參數相同,結果就相同。
那么可采用數組記憶遞歸結果,若有重復進入遞歸狀態則直接返回結果。

Pipeline:

  1. 確定dfs 代表的含義, 從最終狀態開始
  2. 確定遞歸出口
  3. 寫dfs 轉移表達式
  4. 翻譯為遞推, 遞歸出口即為初始條件, dfs 轉移表達式 即為 狀態轉移方程

時間復雜度: 單個狀態 乘以 計算當前單個狀態所需要的時間

爬樓梯 https://leetcode.cn/problems/climbing-stairs/

使用最小花費爬樓梯 https://leetcode.cn/problems/min-cost-climbing-stairs/

class Solution {
public:// dfs(i) 第n個臺階所需要的最小花費// dfs(i) = min(dfs(i - 1) + nums[i - 1], dfs(i - 2) + nums[i - 2]);vector <int> f;int dfs(vector<int>& cost, int n){if(n <= 1) return 0;if(f[n] != -1) return f[n];return f[n] = min(dfs(cost, n - 1) + cost[n - 1], dfs(cost, n - 2) + cost[n - 2]);}int minCostClimbingStairs(vector<int>& cost) {int n = cost.size();f.resize(n + 1, -1);return dfs(cost, cost.size());}
};
class Solution {
public:// dfs(i) 第n個臺階所需要的最小花費// dfs(i) = min(dfs(i - 1) + nums[i - 1], dfs(i - 2) + nums[i - 2]);vector <int> f;int minCostClimbingStairs(vector<int>& cost) {int n = cost.size();f.resize(n + 1, 0);f[0] = 0, f[1] = 0;for(int i = 2;i <= n;i ++){f[i] = min(f[i - 1] + cost[i - 1], f[i - 2] + cost[i - 2]);}return f[n];}
};

空間優化,當前狀態只和前一兩個狀態有關,優化到O(1)

class Solution {
public:// dfs(i) 第n個臺階所需要的最小花費// dfs(i) = min(dfs(i - 1) + nums[i - 1], dfs(i - 2) + nums[i - 2]);int minCostClimbingStairs(vector<int>& cost) {int n = cost.size();int f0 = 0, f1 = 0, newF = 0;for(int i = 2;i <= n;i ++){newF = min(f1 + cost[i - 1], f0 + cost[i - 2]);f0 = f1;f1 = newF;}return f1;}
};
  1. 組合總和 Ⅳ https://leetcode.cn/problems/combination-sum-iv/
class Solution {
public:vector <int> f;int dfs(int i, vector<int>& nums){if(i == 0) return 1;if(f[i] != -1) return f[i];int res = 0;for(auto x: nums){if(x <= i){res += dfs(i - x, nums);}}return f[i] = res;}int combinationSum4(vector<int>& nums, int target) {f.resize(1005, -1);return dfs(target, nums);}
};
class Solution {
public:int combinationSum4(vector<int>& nums, int target) {vector <unsigned > f(target + 1);f[0] = 1;for(int i = 1;i <= target;i ++){for(auto x : nums) {if(i >= x){f[i] += f[i - x];}}}return f[target];}
};
  1. 統計構造好字符串的方案數 https://leetcode.cn/problems/count-ways-to-build-good-strings/

  2. 統計打字方案數 https://leetcode.cn/problems/count-number-of-texts/

  3. 刪除并獲得點數 https://leetcode.cn/problems/delete-and-earn/

  4. 打家劫舍 II https://leetcode.cn/problems/house-robber-ii/

LCR 166. 珠寶的最高價值 https://leetcode.cn/problems/li-wu-de-zui-da-jie-zhi-lcof/

01背包和完全背包

多維dp

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

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

相關文章

RabbitMQ中的異步Confirm模式:提升消息可靠性的利器

在現代分布式系統中&#xff0c;消息隊列&#xff08;Message Queue&#xff09;扮演著至關重要的角色&#xff0c;它能夠解耦系統組件、提高系統的可擴展性和可靠性。RabbitMQ作為一款廣泛使用的消息隊列中間件&#xff0c;提供了多種機制來確保消息的可靠傳遞。其中&#xff…

買賣預測工具

設計一個用于在交易市場中尋找確定性或大概率盈利的買賣預測工具是一個具有挑戰性但非常有潛力的項目。你可以通過以下幾個步驟進行思路規劃&#xff1a; 1. 明確目標 大概率盈利&#xff1a;工具的目的是找出大概率盈利的交易機會。不能完全依賴于100%確定性&#xff0c;因為…

【數據結構】數據結構簡要介紹

數據結構是計算機科學中用于組織、管理和存儲數據的方式&#xff0c;以便于高效地訪問和修改數據。 數據結構的分類&#xff1a; 數據結構可以大致分為兩類&#xff1a;線性結構和非線性結構。 1. 線性結構 線性結構中的數據按順序排列&#xff0c;每個元素有唯一的前驅和后…

note 41:賬務系統開發規范

目錄 系統設計 防重控制 流量控制 并發控制 異常處理 備份機制 系統開發??????? 前端隊列操作 外系統交互 ?????????????? 系統設計 防重控制 對于進入到系統中的數據&#xff08;文件導入、手工錄入、系統直連等&#xff09;以及本系統發往外…

Circular Spanning Tree(樹的性質)

Circular Spanning Tree 本道題目加深理解樹的性質&#xff1a; 思路&#xff1a; 首先考慮什么情況是NO&#xff0c;那么不難想當字符串全是0的時候一定是不行的&#xff0c;因為這樣就構成環了&#xff0c;還有一種情況是1的個數為奇數的時候是不行的&#xff0c;一棵樹中為…

linux安裝nginxs報錯:openssl not found

系統&#xff1a; linux 版本&#xff1a;centOS7 nginx版本&#xff1a;nginx-1.20.2 linux安裝nginx時 執行下面命令時報錯&#xff1a; ./configure --with-http_stub_status_module --with-http_ssl_module --prefix/usr/local/nginxchecking for OpenSSL library ... not …

【論文筆記】Contrastive Learning for Sign Language Recognition and Translation

&#x1f34e;個人主頁&#xff1a;小嗷犬的個人主頁 &#x1f34a;個人網站&#xff1a;小嗷犬的技術小站 &#x1f96d;個人信條&#xff1a;為天地立心&#xff0c;為生民立命&#xff0c;為往圣繼絕學&#xff0c;為萬世開太平。 基本信息 標題: Contrastive Learning for…

docker redis安裝

一.鏡像拉取 docker pull redis:5.0新建文件 touch /home/redis/redis.conf touch /home/redis/redis_6379.pid # bind 192.168.1.100 10.0.0.1 # bind 127.0.0.1 ::1 #bind 127.0.0.1protected-mode noport 6379tcp-backlog 511requirepass roottimeout 0tcp-keepali…

【CSS in Depth 2 精譯_096】16.4:CSS 中的三維變換 + 16.5:本章小結

當前內容所在位置&#xff08;可進入專欄查看其他譯好的章節內容&#xff09; 第五部分 添加動效 ??【第 16 章 變換】 ?? 16.1 旋轉、平移、縮放與傾斜 16.1.1 變換原點的更改16.1.2 多重變換的設置16.1.3 單個變換屬性的設置 16.2 變換在動效中的應用 16.2.1 放大圖標&am…

小程序租賃系統開發的優勢與實踐探索

內容概要 小程序租賃系統開發正在引起廣泛關注&#xff0c;特別是在數字化快速發展的今天。很多企業開始意識到&#xff0c;小程序不僅能為他們帶來更多的客戶&#xff0c;還能極大地提高管理效率。借助小程序&#xff0c;用戶在租賃時可以更加方便地瀏覽和選擇產品&#xff0…

機器人C++開源庫The Robotics Library (RL)使用手冊(二)

由于RL庫采用跨平臺CMake源碼,可以輕松在win、ubantu等平臺部署、編譯,win通常用VS編譯器,為了便于使用、閱讀,需要將CMake編譯成VS工程。 1、準備三個工具:CMake、VS、QT 為了在Windows上編譯RL和依賴項,您需要安裝一個編譯器(例如。,Visual Studio 2017)和跨平臺構…

如何在LabVIEW中更好地使用ActiveX控件?

在LabVIEW中&#xff0c;ActiveX控件可以幫助實現與其他應用程序或第三方組件的集成&#xff08;例如Microsoft Excel、Word、Internet Explorer等&#xff09;。以下是一些建議&#xff0c;幫助您更好地在LabVIEW中使用ActiveX控件&#xff1a; ? 1. 理解ActiveX控件的基本原…

如何使用Python從SACS結構數據文件中提取節點數據信息并導出到EXCEL

在現代工程設計中&#xff0c;結構分析和數據處理是不可或缺的一部分。特別是在海洋工程、橋梁建設等領域&#xff0c;SACS文件被廣泛應用。這種文件格式包含了結構模型的各種重要信息&#xff0c;包括節點&#xff08;JOINT&#xff09;、構件&#xff08;ELEMENT&#xff09;…

如何判斷一個學術論文是否具有真正的科研價值?ChatGPT如何提供幫助?

目錄 1.創新性與學術貢獻的超級加分? 2.科研過程中的各個環節—從0到1? 3.創新性與理論深度的完美結合? 4.論證與寫作的清晰性? 5.數據整理和文獻回顧——效率與精準并存? 6.創新性要求輔助? 總結 寶子們&#xff0c;學術論文寫作的旅程是不是感覺像是走進了迷霧森…

學習threejs,THREE.CircleGeometry 二維平面圓形幾何體

&#x1f468;??? 主頁&#xff1a; gis分享者 &#x1f468;??? 感謝各位大佬 點贊&#x1f44d; 收藏? 留言&#x1f4dd; 加關注?! &#x1f468;??? 收錄于專欄&#xff1a;threejs gis工程師 文章目錄 一、&#x1f340;前言1.1 ??THREE.CircleGeometry 圓形…

【微服務】SpringBoot 自定義消息轉換器使用詳解

目錄 一、前言 二、SpringBoot 內容協商介紹 2.1 什么是內容協商 2.2 內容協商機制深入理解 2.2.1 內容協商產生的場景 2.3 內容協商實現的常用方式 2.3.1 前置準備 2.3.2 通過HTTP請求頭 2.3.2.1 操作示例 2.3.3 通過請求參數 三、SpringBoot 消息轉換器介紹 3.1 H…

深入理解Composer自動加載機制

Composer是PHP生態系統中最常用的依賴管理工具之一&#xff0c;它不僅能夠幫助開發者管理項目的依賴關系&#xff0c;還能夠自動加載這些依賴項。自動加載機制是Composer的核心功能之一&#xff0c;通過自動加載&#xff0c;開發者可以在運行時按需加載所需的類和文件&#xff…

【游戲設計原理】35 - 委員會設計

一、 分析并總結 核心內容 定義&#xff1a;委員會設計&#xff08;Design by Committee&#xff09;是指游戲開發團隊通過集體協作完成設計&#xff0c;這種模式結合了多樣化的創意和個體專長&#xff0c;但也可能因缺乏一致性而導致設計的混亂。優勢&#xff1a;多樣性帶來…

【Java】IO流練習

IO流練習 題干&#xff1a; 根據指定要求&#xff0c;完成電話記錄、 注冊、登錄 注冊 題干&#xff1a; 完成【注冊】功能&#xff1a; 要求&#xff1a; 用戶輸入用戶名、密碼存入users.txt文件中 若users.txt文件不存在&#xff0c;創建該文件若users.txt文件存在 輸入…

內網學習:工作組用戶與權限

目錄 一、本地用戶組介紹本地工作組介紹用戶與組的關系 二、四種用戶類型及權限比較本地系統最高權限&#xff08;System賬戶&#xff09;特性Administrator與System賬戶的區別 本地最高管理員&#xff08;Administrator用戶&#xff09;特性 本地普通管理員特性 本地普通用戶特…