跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像AI 生图工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
C++算法

动态规划:路径问题

介绍使用动态规划求解下降最小路径和的方法。定义状态 dp[i][j] 表示到达位置的最小路径和,通过比较上方三个方向的最小值进行状态转移。为解决边界问题,初始化时增加虚拟行列,第一行置 0 其余置正无穷。填表顺序为从上往下,最终返回最后一列的最小值。文末提供 C++ 代码实现及解题五步总结。

蜜桃汽水发布于 2026/3/30更新于 2026/7/1163 浏览
动态规划:路径问题

动态规划:路径问题

下降最小路径和

图片描述

1. 状态表示

假设用 dp[i][j] 表示到达位置 [i, j] 的最小路径和。

2. 状态转移方程

结合图片分析,若 A 点要到达三角形区域,需考虑 A 点上方的数通过最小路径到达 A。路径变为 x->A->三角形。根据状态表示,到达 A 点的最小路径可转换为 dp[i-1][j-1]、dp[i-1][j] 或 dp[i-1][j+1]。

图片描述

图片描述

图片描述

文字总结:在 dp 表中每一个位置向下都有 3 种情况,根据这三种情况可以规划出动态方程。因为要求最小路径和,所以在三个路径下取最小值。状态转移方程为: dp[i][j] = min(dp[i-1][j-1], min(dp[i-1][j], dp[i-1][j+1])) + d[i][j]

3. 初始化

初始化的目的是防止越界访问的问题。 由状态转移方程得出:dp[i][j] = min(dp[i-1][j-1], min(dp[i-1][j], dp[i-1][j+1])) + d[i][j]。 我们需要上方的 3 个元素分别是 [i,j-1]、[i,j]、[i,j+1]。 所以需要添加 1 行 2 列,去避免数组越界的问题(圈圆圈的就是会越界的地方)。

图片描述

【注意事项】

  1. 虚线里面的值是要保证不影响后面的操作,第一行就不要影响圆圈的值,可以把第一行初始化成 0。对于列:不要影响最小值的比对 min(x,y,z),那么把列初始化为正无穷大。

图片描述

  1. d 表对应 dp 表下标的映射。

4. 填表顺序

填表顺序:从上往下(因为对于填表左右对状态方程没有什么影响,而上下是有影响的)。

5. 返回值

返回最后一列的最小值。

6. 代码实现

class Solution {
public:
    int minFallingPathSum(vector<vector<int>>& matrix) {
        // 创建 dp 表
        int m = matrix.size();
        int n = matrix[0].size();
        vector<vector<int>> dp(m + 1, vector<int>(n + 2, INT_MAX));
        for (int i = 0; i < n + 2; i++) {
            dp[0][i] = 0;
        }
        // 填表
        for (int i = 1; i <= m; i++) {
            for (int j = 1; j <= n; j++) {
                dp[i][j] = min(dp[i - 1][j], min(dp[i - 1][j - 1], dp[i - 1][j + 1])) + matrix[i - 1][j - 1];
            }
        }
        // 返回结果
        int ret = INT_MAX;
        for (int i = 1; i <= n; i++) {
            ret = min(ret, dp[n][i]);
        }
        return ret;
    }
};

总结

对于路径问题: 第一:分析状态 第二:列出状态方程 第三:初始化 (防止越界访问) 第四:填表顺序 (由状态方程得出填表顺序) 第五:得出返回值

目录

  1. 动态规划:路径问题
  2. 下降最小路径和
  3. 1. 状态表示
  4. 2. 状态转移方程
  5. 3. 初始化
  6. 4. 填表顺序
  7. 5. 返回值
  8. 6. 代码实现
  9. 总结
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • JavaScript 数组扁平化实战:不依赖 flat 方法的三种实现
  • Python 实战:2025 年中秋月相计算与月球可视化
  • CTF 竞赛常见解题技巧与工具使用指南
  • Python 零基础自学教程
  • React 前端开发 50 个基础高频面试题
  • 从零构建可扩展 Flutter 应用:v1.0 到 v2.0 架构演进详解
  • 算法:滑动窗口技巧与应用
  • C++ 协程与 Fiber 在游戏异步编程中的应用实践
  • AI 智能体驾驭工程(Harness Engineering)核心解析
  • GLM-5 大模型代码生成能力深度评测与实战体验
  • NUS 尤洋教授《实战 AI 大模型》书籍推荐与核心技术解析
  • Linux 基础 IO 系列(二):C 语言标准库 IO 接口实战
  • 基于 Java 和 Leaflet 的湖南省道路长度 WebGIS 构建
  • Docker 在 Windows 和 Linux 上的部署配置全流程
  • 自然语言处理在教育领域的应用与实战
  • Whisper v0.2 本地语音转文字工具安装与使用指南
  • 利用 AI 生成融合四库文化与地域特色的网名
  • Python 网络爬虫基础与通用模板实现
  • Java 动态代理核心原理与实战
  • 从 Web 到 API 驱动:Django REST Framework 重构智能合同审查系统

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online