【代碼隨想錄】面試常考類型之動態規劃基礎題目

前言

更詳細的在大佬的代碼隨想錄 (programmercarl.com)

本系列僅是簡潔版筆記,為了之后方便觀看

做題步驟

含義公式初始化順序檢查

  1. 確定dp數組以及下標的含義
  2. 遞推公式
  3. dp數組如何初始化
  4. 遍歷順序
  5. 打印dp數組(看哪里有問題)

斐波那契數?

class Solution {
public:int fib(int n) {if(n<=1) return n;int dp[2];dp[0]=0;dp[1]=1;for(int i=2;i<=n;i++){int sum = dp[0] + dp[1];dp[0] = dp[1];dp[1] = sum;}return dp[1];}
};

爬樓梯?

70. 爬樓梯 - 力扣(LeetCode)

代碼思路和上一題相差不大,主要是初始化和遍歷時i的取值不同。?

class Solution {
public:int climbStairs(int n) {if (n <= 1) return n; vector<int> dp(n + 1);dp[1] = 1;//初始化要根據實際情況進行改變dp[2] = 2;for (int i = 3; i <= n; i++) { dp[i] = dp[i - 1] + dp[i - 2];}return dp[n];}
};

?使用最小花費爬樓梯

746. 使用最小花費爬樓梯 - 力扣(LeetCode)

爬樓梯的消費版

dp表示的是到達本層已經使用的體力,cost[i] 是從本臺階向上爬需要支付的費用

class Solution {
public:int minCostClimbingStairs(vector<int>& cost) {vector<int> dp(cost.size() + 1);dp[0] = 0;//根據題意設計dp[1] = 0;for (int i = 2; i <= cost.size(); i++) {dp[i] = min(dp[i - 1] + cost[i - 1], dp[i - 2] + cost[i - 2]);}return dp[cost.size()];}
};

不同路徑

62. 不同路徑 - 力扣(LeetCode)

題意:只能向下向右到目標地點,求路徑數

dp[i][j] 只和 dp[i - 1][j] 和dp[i][j - 1]有關,很容易造成的觀點錯誤是dp[i - 1][j]+1和dp[i][j - 1]推導而來,但是要清楚的是本題求得是路徑數,dp[i - 1][j] 只能向下走,dp[i][j - 1]只能向右走,所以路徑數不變

class Solution {
public:int uniquePaths(int m, int n) {vector<vector<int>>dp(m,vector<int>(n,0));for (int i = 0; i < m; i++) dp[i][0] = 1;for (int j = 0; j < n; j++) dp[0][j] = 1;for (int i = 1; i < m; i++) {for (int j = 1; j < n; j++) {dp[i][j] = dp[i - 1][j] + dp[i][j - 1];}}return dp[m - 1][n - 1];}
};

不同路徑 II

和上一題的不同點:障礙物的出現

代碼不同點:遍歷順序添加限制條件,不同路徑初始化要改變

沒有障礙物的時候才可以正常遍歷?

if (obstacleGrid[i][j] == 0) { dp[i][j] = dp[i - 1][j] + dp[i][j - 1];
}
vector<vector<int>> dp(m, vector<int>(n, 0));
for (int i = 0; i < m && obstacleGrid[i][0] == 0; i++) dp[i][0] = 1;
for (int j = 0; j < n && obstacleGrid[0][j] == 0; j++) dp[0][j] = 1;

整數拆分

. - 力扣(LeetCode)

拆成若干數使得相乘最大

技巧:拆分成多個近似相等的數?

難思考點:遍歷順序

j * (i - j) :把整數拆分為兩個數相乘,

j * dp[i - j]:拆分成兩個以及兩個以上的個數相乘

for (int i = 3; i <= n ; i++) {for (int j = 1; j < i - 1; j++) {dp[i] = max(dp[i], max((i - j) * j, dp[i - j] * j));}
}
class Solution {
public:int integerBreak(int n) {vector<int> dp(n + 1);dp[2] = 1;//dp[0]和dp[1]都是0 因為不需要拆分for (int i = 3; i <= n ; i++) {for (int j = 1; j <= i / 2; j++) {dp[i] = max(dp[i], max((i - j) * j, dp[i - j] * j));//求取最大值}return dp[n];//返回全部遍歷后的最大值}
};

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

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

相關文章

MFC:CFileFind類使用方法介紹

這是一個介紹MFC中CFileFind類的小程序。編寫這個程序使用的編輯軟件是VS2022&#xff0c;基于C空項目。在C空項目下要調用MFC類需要&#xff1a;首先&#xff0c;頭文件要包含<afx.h>&#xff0c;這個頭文件包含了絕大部分使用MFC所需頭文件&#xff1b;其次&#xff0c…

在線改圖片怎么做更簡單?快速修改圖片尺寸的方法

現在一般拍攝出的圖片尺寸都會比較大&#xff0c;想要上傳大網上的一些平臺展示時&#xff0c;經常會受到平臺的限制&#xff0c;無法將圖片正常上傳到平臺&#xff0c;那么如何將圖片尺寸快速調整呢&#xff1f;比較簡單的一種方式&#xff0c;可以通過在線改圖片的工具來實現…

一個開源的個人主頁模板,可以通過 Github Actions 來進行自動構建。

無名の主頁 簡單的小主頁&#xff0c;原來的看夠了&#xff0c;重新弄了一個 主頁的 Logo 字體已經過壓縮&#xff0c;若用本站 Logo 以外的字母會變回默認字體&#xff0c;這里是 完整字體&#xff0c;若無法下載&#xff0c;可將字體目錄下的 Pacifico-Regular-all.ttf 進行替…

Linux程序開發(十一):進程與進程間通信設計之趣味貓咪抓老鼠游戲

Tips&#xff1a;"分享是快樂的源泉&#x1f4a7;&#xff0c;在我的博客里&#xff0c;不僅有知識的海洋&#x1f30a;&#xff0c;還有滿滿的正能量加持&#x1f4aa;&#xff0c;快來和我一起分享這份快樂吧&#x1f60a;&#xff01; 喜歡我的博客的話&#xff0c;記得…

他用AI,抄襲了我的AI作品

《大話西游》里面有一句經典臺詞&#xff1a;每個人都有一個媽&#xff0c;但是“你媽就一定是你媽嗎&#xff1f;” 用AI創作的藝術作品&#xff0c;也走進類似的困境&#xff1a;如何證明你用AI生成的作品&#xff0c;就是你的作品&#xff1f; 近日&#xff0c;騰訊科技獨…

Google手機連接wifi后提示“無法連接互聯網“解決方法

1.原因分析 谷歌手機聯網前會先訪問谷歌的服務器:http://clients3.google.com/generate_204來探測網絡是否連通&#xff0c;由于國內網絡防火墻的原因訪問不了&#xff0c;所以就提示"無網絡連接"。 2.解決方法 可以通過adb命令修改驗證網絡是否連通的服務器地址&…

SpringCloudAlibaba:6.3SpringBoot接入RocketMQ

依賴 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 htt…

【C++提高編程-04】----C++之Vector容器實戰

&#x1f3a9; 歡迎來到技術探索的奇幻世界&#x1f468;?&#x1f4bb; &#x1f4dc; 個人主頁&#xff1a;一倫明悅-CSDN博客 ?&#x1f3fb; 作者簡介&#xff1a; C軟件開發、Python機器學習愛好者 &#x1f5e3;? 互動與支持&#xff1a;&#x1f4ac;評論 &…

STM32+CubeMX移植SPI協議驅動W25Q16FLash存儲器

STM32CubeMX移植SPI協議驅動W25Q16FLash存儲器 SPI簡介拓撲結構時鐘相位&#xff08;CPHA&#xff09;和時鐘極性&#xff08; CPOL&#xff09; W25Q16簡介什么是Flash&#xff0c;有什么特點&#xff1f;W25Q16內部塊、扇區、頁的劃分引腳定義通訊方式控制指令原理圖 CubeMX配…

iBarcoder for Mac v3.15.1中文激活版:讓條形碼生成變得如此簡單

在現代社會&#xff0c;條形碼無處不在&#xff0c;從超市商品到物流包裹&#xff0c;都離不開它的身影。iBarcoder for Mac作為一款簡單易用的條形碼生成軟件&#xff0c;讓條形碼的生成變得如此簡單。 iBarcoder for Mac v3.15.1中文激活版下載 無論你是需要為商品添加條形碼…

Scrapy框架簡單介紹及Scrapy項目編寫詳細步驟

引言 Scrapy是一個用Python編寫的開源、功能強大的網絡爬蟲框架&#xff0c;專為網頁抓取和數據提取設計。它允許開發者高效地從網站上抓取所需的數據&#xff0c;并通過一系列可擴展和可配置的組件來處理這些數據。Scrapy框架的核心組成部分包括&#xff1a; Scrapy Engine&…

aws glue配置讀取本地kafka數據源

創建連接時填寫本地私有ip地址&#xff0c;選擇網絡配置 配置任務選擇kafka作為數據源 但是執行任務時日志顯示連接失敗 文檔提到只能用加密通信 如果您希望與 Kafka 數據源建立安全連接&#xff0c;請選擇 Require SSL connection (需要 SSL 連接)&#xff0c;并在 Kafka priv…

python批發模塊的調試之旅:從新手到專家的蛻變

新書上架~&#x1f447;全國包郵奧~ python實用小工具開發教程http://pythontoolsteach.com/3 歡迎關注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目錄 一、調試技巧的重要性 二、批發模塊調試的實戰演練 1. 設置斷點 2. 逐行執行代碼 3. 觀察…

Android+SQLiteOpenHelper實現登錄記住密碼小案例

實現自動登錄&#xff0c;在數據庫中存 注冊的賬號信息 package com.example.databases_text;import android.content.Context; import android.content.SharedPreferences; import android.os.Bundle; import android.text.TextUtils; import android.util.Log; import andro…

運維行業中的堆疊交換機監控與配置管理策略

隨著信息技術的迅猛發展&#xff0c;企業網絡架構日趨復雜&#xff0c;交換機作為網絡基礎設施的核心設備&#xff0c;其穩定性和安全性對于企業業務的運行至關重要。在運維實踐中&#xff0c;堆疊交換機&#xff08;Stacked Switches&#xff09;因其高可靠性、靈活擴展性等特…

SM2258G專用SSD開卡工具(三星閃存),后附工具下載

工具下載&#xff1a; https://download.csdn.net/download/weixin_43097956/89354302

「貪心算法」檸檬水找零

力扣原題鏈接&#xff0c;點擊跳轉。 假設你的手里沒有錢。你要賣檸檬水&#xff0c;每杯5塊錢。每個顧客有可能會給你5塊錢、10塊錢或20塊錢&#xff0c;你要拿手中的錢找零。如何判斷你能否成功找零呢&#xff1f; 如果一上來就有顧客花10塊錢或20塊錢&#xff0c;你手中沒…

python中特殊的靜態方法__new__

一、關于new方法 在Python中&#xff0c;__new__方法是一個特殊的靜態方法&#xff0c;用于實例化對象。通常不需要直接調用__new__方法&#xff0c;Python會自動調用它來分配內存空間并返回一個新對象&#xff08;或者更具體地說&#xff0c;是對象的引用&#xff09;。然而&…

視頻怎么轉換成二維碼圖片?視頻做成二維碼播放的方法

怎樣在電腦上制作可以播放視頻的二維碼呢&#xff1f;很多日常生活中&#xff0c;很多的場景或者物品都會有自己的二維碼&#xff0c;其他人通過掃碼就可以獲取對應的內容。有很多場景下會把視頻轉換二維碼&#xff0c;通過掃碼在手機上查看視頻內容&#xff0c;比如產品介紹、…

水表電表遠程抄表是什么?

1.簡述&#xff1a;水表電表遠程抄表技術性 隨著時代的發展&#xff0c;傳統式手動抄表方法早已被更為高效、智能化的遠程抄表系統所替代。水表電表遠程抄表&#xff0c;說白了&#xff0c;就是利用互聯網技術完成對水表和電表讀數的遠程數據采集管理方法&#xff0c;大大提升…