動態規劃應用場景 + 代表題目清單(模板加上套路加上題單)

1. 序列型DP(Sequence DP)

? 應用場景
  • 單個或多個序列(數組/字符串),求最優子結構。

  • 常見問題:最長遞增子序列、最長公共子序列、回文子序列。

🧠 套路總結
  • 單序列:dp[i] = max(dp[j]) + 1 (j < i 且 nums[j] < nums[i])

  • 雙序列:dp[i][j] = max(dp[i-1][j], dp[i][j-1], dp[i-1][j-1]+1) 依賴匹配關系

🧪 代表題目
1.1 最長遞增/最長遞減子序列
  • 題目舉例

    • LeetCode 300. Longest Increasing Subsequence

    • LeetCode 674. Longest Continuous Increasing Subsequence

    • LeetCode 646. Maximum Length of Pair Chain

    • LeetCode 376. Wiggle Subsequence

1.2 最長公共子序列/子串
  • 題目舉例

    • LeetCode 1143. Longest Common Subsequence

    • LeetCode 1092. Shortest Common Supersequence

    • LeetCode 718. Maximum Length of Repeated Subarray

1.3 回文子序列/子串
  • 題目舉例

    • LeetCode 516. Longest Palindromic Subsequence

    • LeetCode 5. Longest Palindromic Substring

    • LeetCode 647. Palindromic Substrings

1.4 編輯距離和相似度
  • 題目舉例

    • LeetCode 72. Edit Distance

    • LeetCode 583. Delete Operation for Two Strings

🧩 Go 模板
for i := 1; i < n; i++ {for j := 0; j < i; j++ {if condition {dp[i] = max(dp[i], dp[j] + val)}}
}

2. 背包型DP(Knapsack DP)

? 應用場景
  • 有物品、價值、容量的選擇問題。

  • 子類型:0/1背包、完全背包、多重背包。

🧠 套路總結
// 0/1 背包(從大到小)
for i := 0; i < n; i++ {for j := cap; j >= weight[i]; j-- {dp[j] = max(dp[j], dp[j-weight[i]]+value[i])}
}// 完全背包(從小到大)
for i := 0; i < n; i++ {for j := weight[i]; j <= cap; j++ {dp[j] = max(dp[j], dp[j-weight[i]]+value[i])}
}
🧪 代表題目
2.1 0/1背包問題
  • 題目舉例

    • LeetCode 416. Partition Equal Subset Sum

    • LeetCode 1049. Last Stone Weight II

    • LeetCode 474. Ones and Zeroes

2.2 完全背包問題
  • 題目舉例

    • LeetCode 518. Coin Change II

    • LeetCode 322. Coin Change

    • LeetCode 139. Word Break

2.3 多重背包、分組背包等變形
  • 題目舉例

    • LeetCode 698. Partition to K Equal Sum Subsets

    • LeetCode 474. Ones and Zeroes (也包含組背包思想)


3. 區間型DP(Interval DP)

? 應用場景
  • 合并區間、回文判斷,求最優合并方案。

  • 狀態:dp[i][j]表示區間[i,j]的最優值。

🧠 套路總結
for length := 2; length <= n; length++ {for i := 0; i <= n-length; i++ {j := i + length - 1for k := i; k < j; k++ {dp[i][j] = min(dp[i][j], dp[i][k]+dp[k+1][j]+cost[i][j])}}
}
🧪 代表題目
3.1 合并區間與括號相關
  • 題目舉例

    • LeetCode 312. Burst Balloons

    • LeetCode 1000. Minimum Cost to Merge Stones

    • LeetCode 544. Output Contest Matches

3.2 回文串判定與劃分
  • 題目舉例

    • LeetCode 5. Longest Palindromic Substring

    • LeetCode 132. Palindrome Partitioning II

    • LeetCode 131. Palindrome Partitioning


4. 狀態壓縮DP(Bitmask DP)

? 應用場景
  • 元素子集、排列組合、旅行商問題等。

  • 狀態數 ≈ 2^n(n ≤ 20)

🧠 套路總結
for mask := 0; mask < (1<<n); mask++ {for i := 0; i < n; i++ {if (mask&(1<<i)) == 0 {newMask := mask | (1 << i)dp[newMask] = min(dp[newMask], dp[mask]+cost[prev][i])}}
}
🧪 代表題目
4.1 旅行商(TSP)
  • 題目舉例

    • LeetCode 847. Shortest Path Visiting All Nodes

    • LeetCode 1129. Shortest Path with Alternating Colors

4.2 子集劃分和集合覆蓋
  • 題目舉例

    • LeetCode 698. Partition to K Equal Sum Subsets

    • LeetCode 1269. Number of Ways to Stay in the Same Place After Some Steps


5. 樹形DP(Tree DP)

? 應用場景
  • 狀態在樹上自底向上傳遞,依賴子樹結構。

🧠 套路總結
func dfs(node *TreeNode) (rob, notRob int) {if node == nil {return 0, 0}leftRob, leftNot := dfs(node.Left)rightRob, rightNot := dfs(node.Right)rob = node.Val + leftNot + rightNotnotRob = max(leftRob, leftNot) + max(rightRob, rightNot)return
}
🧪 代表題目
  • 5.1 樹上選點問題
  • 題目舉例

    • LeetCode 337. House Robber III

    • LeetCode 87. Scramble String (也用樹形DP思想)

  • 題目舉例

    • LeetCode 124. Binary Tree Maximum Path Sum

    • LeetCode 968. Binary Tree Cameras

  • 5.2 樹上路徑問題

6. 計數型DP(Counting DP)

? 應用場景
  • 統計路徑、方案數、組合數。

🧠 套路總結
for i := 0; i < m; i++ {for j := 0; j < n; j++ {if i > 0 {dp[i][j] += dp[i-1][j]}if j > 0 {dp[i][j] += dp[i][j-1]}}
}
🧪 代表題目
  • 6.1 路徑計數
  • 題目舉例

    • LeetCode 62. Unique Paths

    • LeetCode 63. Unique Paths II

  • 6.2 組合計數
  • 題目舉例

    • LeetCode 70. Climbing Stairs

    • LeetCode 639. Decode Ways II

  • 題目舉例

    • LeetCode 377. Combination Sum IV

  • 6.3 排列計數
    • LeetCode 377. Combination Sum IV

7. 概率型DP(Probability DP)

? 應用場景
  • 求概率、期望值。

🧠 套路總結
for k := 1; k <= K; k++ {for i := 0; i < N; i++ {for j := 0; j < N; j++ {for _, dir := range dirs {ni, nj := i+dir[0], j+dir[1]if inBounds(ni, nj) {dp[k][i][j] += dp[k-1][ni][nj] / 8.0}}}}
}
🧪 代表題目
7.1 馬爾可夫過程概率計算
  • 題目舉例

    • LeetCode 688. Knight Probability in Chessboard

    • LeetCode 837. New 21 Game

7.2 期望值計算
  • 題目舉例

    • LeetCode 470. Implement Rand10() Using Rand7()

? 8. 子串 / 子序列問題

多用于字符串匹配、編輯距離等

🔹 場景:

  • 最長公共子序列、子串

  • 編輯距離

  • 回文子序列

🔸 代表題目:

題號名稱
1143Longest Common Subsequence
72Edit Distance
5Longest Palindromic Substring

📌 模板結構:

if s[i] == t[j] {dp[i][j] = dp[i-1][j-1] + 1
} else {dp[i][j] = max(dp[i-1][j], dp[i][j-1])
}

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

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

相關文章

Linux iSCSI存儲共享實驗指南

實驗介紹 1、在Linux平臺上通過iSCSI協議實現IP-SAN存儲共享 2、掌握存儲導出(export)和存儲導入(import)的配置方法 3、學習iSCSI存儲的發現、連接、斷開和管理操作 1、實驗環境 兩臺同網段的Linux虛擬機&#xff08;無需物理交換機&#xff09; 操作系統&#xff1a;Lin…

從 Docker 到 runC

從 Docker 到 runC:容器底層原理詳解 目錄 1. Docker 與 runC 的關系 2. Docker 的核心組件 3. runC 的核心功能 4. 實戰示例:從 Docker 到 runC 4.1 示例場景:運行一個簡單容器 4.2 Docker 底層調用 runC 的流程 4.3 查看 runC 的調用 4.4 直接調用 runC 創建容器 …

使用Python在PowerPoint中插入形狀(Shape)

在進行演示文稿設計時&#xff0c;形狀&#xff08;Shape&#xff09;不僅可以增強視覺效果&#xff0c;還可以用于展示流程圖、標注、數據圖示等。借助Python&#xff0c;我們可以通過代碼快速批量地在PPT中添加各種形狀&#xff0c;提升設計效率。本文將介紹如何使用Python向…

Windows系統下MySQL 8.4.5壓縮包安裝詳細教程

一、MySQL 8.4.5新特性概覽 相較于舊版本&#xff0c;MySQL 8.4.5在性能與功能上實現了顯著提升&#xff1a; 性能優化&#xff1a;官方測試顯示&#xff0c;在高并發場景下&#xff0c;其讀寫性能較5.7版本提升近2倍&#xff0c;尤其在處理熱點數據競爭問題時表現更為出色。…

深度解析Vue項目Webpack打包分包策略 從基礎配置到高級優化,全面掌握性能優化核心技巧

深度解析Vue項目Webpack打包分包策略 從基礎配置到高級優化&#xff0c;全面掌握性能優化核心技巧 一、分包核心價值與基本原理 1.1 為什么需要分包 首屏加載優化&#xff1a;減少主包體積&#xff0c;提升TTI&#xff08;Time to Interactive&#xff09;緩存利用率提升&am…

【昇騰開發者訓練營:Dify大模型部署實戰】MindIE + Dify + DeepSeek + Embedding模型 + Rerank模型

文章目錄 部署 Dify1. Dify 適配 ARM2. 安裝 docker3. 啟動 Dify MindIEDify 實操手冊1. 基礎環境搭建1.1 環境檢查1.2 下載模型權重1.3 獲取MindIE鏡像 2. 啟動容器3. 純模型推理測試3.1 純模型對話測試3.2 性能測試 4. 服務化部署4.1 MindIE 配置4.2 MindIE 服務化4.3 發起測…

塔能高溫冰蓄冷技術:工廠能耗精準節能的創新之路

在工廠的能耗構成中&#xff0c;制冷系統是重要的耗能環節。傳統的水蓄冷和冰蓄冷技術在實際應用中存在一些局限性&#xff0c;難以滿足工廠對節能和成本控制的更高要求。塔能科技的高溫冰蓄冷技術&#xff0c;憑借其獨特的優勢&#xff0c;為工廠能耗精準節能提供了創新的解決…

通過現代數學語言重構《道德經》核心概念體系,形成一個兼具形式化與啟發性的理論框架

以下是對《道德經》的數學轉述嘗試&#xff0c;通過現代數學語言重構其核心概念&#xff0c;形成一個兼具形式化與啟發性的理論框架&#xff1a; 0. 基礎公理體系 定義&#xff1a; 《道德經》是一個動態宇宙模型 U(D,V,Φ)&#xff0c;其中&#xff1a; D 為“道”的無限維…

SQLMesh Typed Macros:讓SQL宏更強大、更安全、更易維護

在SQL開發中&#xff0c;宏&#xff08;Macros&#xff09;是一種強大的工具&#xff0c;可以封裝重復邏輯&#xff0c;提高代碼復用性。然而&#xff0c;傳統的SQL宏往往缺乏類型安全&#xff0c;容易導致運行時錯誤&#xff0c;且難以維護。SQLMesh 引入了 Typed Macros&…

5月23日day34打卡

GPU訓練及類的call方法 知識點回歸&#xff1a; CPU性能的查看&#xff1a;看架構代際、核心數、線程數GPU性能的查看&#xff1a;看顯存、看級別、看架構代際GPU訓練的方法&#xff1a;數據和模型移動到GPU device上類的call方法&#xff1a;為什么定義前向傳播時可以直接寫作…

集群、容器云與裸金屬服務器的全面對比分析

文章目錄 引言 集群 2.1 定義 2.2 特點 2.3 應用場景 容器云 3.1 定義 3.2 核心功能 3.3 應用場景 裸金屬 4.1 定義 4.2 特點 4.3 應用場景 三者的區別 5.1 架構與性能 5.2 管理與運維 5.3 成本與靈活性 總結 1. 引言 在云計算和數據中心領域&#xff0c;50…

Vscode +Keil Assistant編譯報錯處理

Vscode Keil Assistant編譯報錯處理 1.報錯圖片內容 所在位置 行:1 字符: 25 chcp.com 65001 -Command & c:\Users\92170.vscode\extensions\cl.keil-a … ~ 不允許使用與號(&)。& 運算符是為將來使用而保留的&#xff1b;請用雙引號將與號引起來(“&”)&…

Java實現中文金額轉換

概述 話不多說&#xff0c;直接上代碼 代碼 /*** Author: hweiyu* Description: TODO* Date: 2025/5/23 11:33*/ import java.math.BigDecimal; import java.util.Scanner;public class AmountToChinese {// 中文數字字符private static final String[] NUMBERS {"零&…

Oracle 的 ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH 命令

Oracle 的ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH 命令 ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH 是 Oracle Data Guard 環境中用于停止恢復過程并準備備用數據庫切換為主庫的關鍵命令。 命令用途 該命令主要用于以下場景&#xff1a; 故…

Java 依賴管理工具:使用 Sonatype Nexus 管理項目依賴

Java 依賴管理工具&#xff1a;使用 Sonatype Nexus 管理項目依賴 在 Java 開發領域&#xff0c;依賴管理是項目構建和維護過程中的關鍵環節。Sonatype Nexus 作為一個功能強大的依賴管理工具&#xff0c;能夠有效地幫助我們管理項目的各種依賴&#xff0c;提高開發效率并降低…

編譯原理 期末速成

一、基本概念 1. 翻譯程序 vs 編譯程序 翻譯程序的三種方式 編譯&#xff1a;將高級語言編寫的源程序翻譯成等價的機器語言或匯編語言。&#xff08;生成文件&#xff0c;等價&#xff09;解釋&#xff1a;將高級語言編寫的源程序翻譯一句執行一句&#xff0c;不生成目標文件…

Pysnmp使用指南

1. 簡介 pysnmp 是一個純 Python 實現的 SNMP&#xff08;Simple Network Management Protocol&#xff09;庫&#xff0c;支持 SNMPv1、SNMPv2c 和 SNMPv3 協議。用于&#xff1a; 查詢&#xff08;GET&#xff09;和修改&#xff08;SET&#xff09;網絡設備的管理信息。遍…

SHELL編程簡介

1.腳本格式&#xff1a; 聲明位于shell腳本的行首&#xff0c;通常形式如下&#xff1a; #!/bin/sh#!/bin/bash 其中#表示注釋&#xff0c;!聲明所使用的shell&#xff0c;后面為所使用shell的絕對路徑。 2.常用函數 echo&#xff1a;shell輸出語句&#xff0c;可不接參數…

Django 中的 ORM 基礎語法

深入剖析 Django 中的 ORM 語法&#xff1a;從基礎到實戰進階 在 Django 開發領域&#xff0c;ORM&#xff08;對象關系映射&#xff09;是開發者高效操作數據庫的得力工具。它以簡潔直觀的 Python 代碼&#xff0c;替代繁瑣的 SQL 語句&#xff0c;極大提升了開發效率。本文將…

A10服務器使用vllm推理框架成功運行Qwen3大模型

1.下載Qwen3大模型&#xff1a; git clone https://www.modelscope.cn/Qwen/Qwen3-1.7B.git放在服務器的/mnt/workspace/Qwen3-1.7B目錄下。 2.創建python虛擬環境&#xff1a; python3 -m venv venv1 source venv1/bin/activate3.安裝vllm推理框架 pip install vllm 4.啟動…