当前位置: 首页 > news >正文

动态规划实践:数字三角形问题分析

动态规划实践:数字三角形问题分析

  1. 数字三角形的动态规划分析
    按照动态规划的求解步骤,我们一步步拆解这个问题:
    1.1 最优子结构与递推方程式
    首先明确状态定义:设 dp[i][j]表示从数字三角形顶部(第0行第0列)走到第i行第j列时,路径经过的数字总和的最大值(行、列索引从0开始)。

最优子结构性质:
走到第i行第j列的最优路径,必然是从它的两个“前驱位置”(第i-1行的j-1列、第i-1行的j列)的最优路径中,选总和更大的那个,再加上当前位置的数字。

递推方程式:
dp[i][j] = max(dp[i-1][j-1], dp[i-1][j]) + triangle[i][j]

边界条件:
三角形顶部只有1个元素:dp[0][0] = triangle[0][0]
每行的边界列(避免越界):
当j=0(每行第1列):dp[i][0] = dp[i-1][0] + triangle[i][0](只能从正上方走下来)
当j=i(每行最后1列):dp[i][j] = dp[i-1][j-1] + triangle[i][j](只能从左上方走下来)

1.2 填表法的细节
表的维度:用n×n的二维数组(n是三角形的行数),第i行仅用到前i+1列(其余位置可忽略)。
填表范围:从第1行(i=1)到第n-1行,每行的列j从0到i。
填表顺序:按“行从上到下、每行从左到右”填写——因为计算第i行的dp值,仅依赖第i-1行的结果。
原问题的最优值:三角形的“底”是第n-1行,最优值是第n-1行所有dp[n-1][j](j从0到n-1)中的最大值。
比如输入样例中n=5,最后一行的dp值是24、30、27、26、24,最大值30就是最终答案。

1.3 时间与空间复杂度
时间复杂度:需要遍历每个可到达的位置(第i行有i+1个位置),总操作数为 1+2+3+…+n = \frac{n(n+1)}{2},因此时间复杂度是 O(n²)。
空间复杂度:
用二维数组存储时,空间复杂度是 O(n²);
若优化为一维数组(用当前行覆盖上一行结果),空间复杂度可降为 O(n)。

  1. 对动态规划算法的理解和体会
    做完数字三角形的分析,我对动态规划的认知更具体了:
    核心是“化繁为简+复用子解”:把“从顶到底的最大路径和”大问题,拆成“走到每个位置的最大和”小问题,且小问题的解可以复用,避免了暴力递归的“重复计算”痛点。
    “最优子结构”是前提:大问题的最优解必须能由子问题的最优解推导而来(比如数字三角形中,每个位置的最优路径依赖前驱的最优路径)。
    状态定义是“灵魂”:合理的状态定义(比如本次的dp[i][j])能自然推导出转移方程;如果状态定义不合理,后续步骤会很难推进。

不过动态规划不是万能的——得先判断问题是否满足“重叠子问题”和“最优子结构”,否则强行使用反而会绕远

http://www.rkmt.cn/news/50676.html

相关文章:

  • 牛客101:链表 - 教程
  • LNCPC 2025 游寄
  • Python 一维数据、二维数据及 CSV 文件操作全解析(附实例)
  • 银行核心账户体系、账务设计、会计核心(整合版)
  • 实用指南:开源 Linux 服务器与中间件(七)数据库--MySQL
  • 版本控制与GitLab完整实践指南 - 指南
  • 利用Myo臂环采集肌电信号和角速度来建立实时手势识别
  • [MySQL] 基础操控
  • 做题笔记25
  • AI重塑地产数字化:数据驱动下的技能落地与效率革命
  • 一种可以通过人体电磁场感受宇宙空间电磁场的装置
  • Access-Control-Allow-Origin 在企业中的用法
  • VUE_basic - Ref
  • 详细介绍:MongoDB 自动化脚本安装方案
  • 2025-11-15
  • Pandas - read_html()
  • 实用指南:Linux企业级解决方案架构:字节跳动短视频推荐系统全链路实践
  • RSS and Atom
  • 通用会话控制方案
  • pythontip 从字典中删除一组键
  • Softmax 函数全面而详细的解读,原理、图像、应用 - 详解
  • MySQL 8+ 日志管理与数据备份恢复实战指南 - 指南
  • 前端css中rem的作用
  • 数据结构2:单链表 - 教程
  • 20251115 - Hash 总结
  • BZOJ2372 music
  • P11664 [JOI 2025 Final] 缆车 / Mi Telefrico
  • 非线性序列密码结构
  • 2025/11/15
  • LoongOS 上传文件