1. 路径类动态规划概述
路径类动态规划(Path DP)是动态规划算法中的一个重要分支,专门用于解决各种路径规划问题。这类问题通常涉及在一个二维或更高维的空间中,从起点到终点寻找最优路径或统计可行路径数量。
1.1 基本特征
路径类DP问题通常具有以下特征:
- 明确的起点和终点
- 有限的移动方向(如只能向右、向下等)
- 每个位置可能有特定的权重或限制条件
- 目标是寻找最优路径(最小/最大代价)或统计所有可行路径
1.2 常见应用场景
路径类DP在现实中有广泛应用:
- 机器人路径规划
- 游戏AI中的寻路算法
- 物流配送路线优化
- 金融投资中的最优决策路径
- 生物信息学中的序列比对
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 核心解题框架
2.1 状态定义
路径类DP的状态定义通常与位置直接相关:
python复制dp[i][j] = 到达位置(i,j)时的最优解或路径数
对于不同问题,状态定义可能有细微差别:
- 求最小/最大路径和:
dp[i][j]表示到达(i,j)的最小/最大累计值 - 求路径数量:
dp[i][j]表示到达(i,j)的路径总数 - 带约束条件的问题:可能需要增加状态维度
2.2 状态转移方程
状态转移方程取决于允许的移动方向。常见情况:
只能向右和向下移动:
python复制dp[i][j] = min(dp[i-1][j], dp[i][j-1]) + grid[i][j] # 最小路径和
dp[i][j] = dp[i-1][j] + dp[i][j-1] # 路径计数
允许对角线移动:
python复制dp[i][j] = min(dp[i-1][j], dp[i][j-1], dp[i-1][j-1]) + grid[i][j]
2.3 初始化技巧
初始化是路径类DP的关键环节,常见方法:
- 起点初始化:
python复制dp[0][0] = grid[0][0] # 对于路径和问题
dp[0][0] = 1 # 对于路径计数问题
- 边界处理:
- 第一行只能从左向右:
python复制for j in range(1, n):
dp[0][j] = dp[
