DP动态规划问题

2025-07-06  本文已影响0人  voidFan

一、一维DP

1.1 爬楼梯

1.2 打家劫舍

1.3 最值问题

二、二维DP

2.1 基础

# 描述:给定一个包含非负整数的 m×n 网格,从左上角到右下角,每次只能向右或向下移动,找出一条路径使得路径上的数字总和最小。
# DP定义:dp[i][j] 表示从 (0,0) 到 (i,j) 的最小路径和。
# 子问题:从上方或左方移动到当前格子的最小和。
# 状态转移:dp[i][j] = grid[i][j] + min(dp[i-1][j], dp[i][j-1])
# 边界条件:dp[0][0] = grid[0][0]
#           第一行和第一列只能从单一方向移动(左或上)。

2.2 进阶

  1. 矩阵的最大非负积 1807
  2. 最大得分的路径数目 1853
  3. 矩阵中和能被 K 整除的路径 1952
  4. 地下城游戏
  5. 矩阵中的最长递增路径
  6. 网格图中递增路径的数目 2001
  7. 检查是否有合法括号字符串路径 2085
  8. 扣分后的最大得分 2106
  9. 最多可收集的水果数目 实际难度 2200
  10. 摘樱桃 II
  11. 摘樱桃
  12. 最长 V 形对角线段的长度 2337 状态设计
  13. 检查是否有路径经过相同数量的 0 和 1(会员题)

三、背包

0-1 背包 ,每个物品只能选一次。

# 描述:给你一个只包含正整数的非空数组nums。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。
# 将问题转化为0-1背包问题:
# 寻找一个子集,使其和等于总和的一半(即背包容量为sum/2)
# dp[i][j]表示前i个元素能否装满j
# dp[i][j] 表示从数组的 [0,i] 下标范围内选取若干个正整数(可以是 0 个),是否存在一种选取方案使得被选取的正整数的和等于 j
# 我们的目标就是求出dp[n][target]

完全背包: 物品可以重复选,无个数限制。

问:关于完全背包,有两种写法.

多重背包(选做): 物品可以重复选,有个数限制。求方案数

分组背包:同一组内的物品至多/恰好选一个。

四、经典线性 DP

4.1 最长公共子序列(LCS)

讲解:最长公共子序列 编辑距离 一般定义 f[i][j] 表示对 (s[:i],t[:j]) 的求解结果。

最长递增子序列(LIS)

上一篇 下一篇

猜你喜欢

热点阅读