动态规划应用场景 + 代表题目清单(模板加上套路加上题单)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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.启动…