模块二 · 经典算法思想与问题求解

单元6 动态规划

围绕“复杂问题如何拆分为多个阶段,并通过保存中间结果得到整体最优解”展开,帮助学生理解动态规划的基本思想、适用特征和典型应用,建立从分阶段决策到全局优化的算法认知。

所属模块
模块二:经典算法思想与问题求解
建议学时
2 学时
教学定位
算法思想单元
1

学习目标

知识目标

理解动态规划“分阶段求解、记录中间结果、避免重复计算”的基本思想,认识最优子结构和重叠子问题两个核心特征,了解其在路径、背包、资源分配等问题中的典型应用。

能力目标

能够初步判断一个问题是否适合使用动态规划,能尝试从状态、阶段和转移关系三个角度分析问题结构,理解动态规划与贪心算法、分治算法的区别。

素养目标

培养学生从局部状态走向整体最优的分析意识,理解复杂问题可以通过结构化拆解逐步求解,提升系统思考和建模能力。

2

教学内容

2.1 动态规划的基本思想

通过爬楼梯、路径计数、最短路径等问题,引导学生理解动态规划并不是“暴力枚举”,而是把一个复杂问题拆解成若干规模更小、结构相似的子问题,并把已经求出的结果保存起来,供后续重复使用,从而提高整体求解效率。

视频讲解说明

本视频建议用于导入,重点说明动态规划为什么要保存中间结果,以及它和简单递归相比为什么能够避免重复计算。

当前为占位视频地址,后续可直接替换成你的课程视频链接。

2.2 状态设计与转移关系

重点讲解动态规划的核心建模过程:如何定义状态、如何划分阶段、如何写出状态转移关系。帮助学生理解,动态规划真正的难点不在计算本身,而在于能否找到合适的状态表示和正确的递推逻辑。

视频讲解说明

本视频建议配合状态表、递推式或网格示意图讲解,重点展示“状态是什么、如何转移、为什么这样转移”的建模过程。

你也可以将这里替换成超星、B站、腾讯视频或本地服务器的视频链接。

2.3 动态规划的典型应用

结合最短路径、背包问题、资源分配、序列优化等案例,说明动态规划特别适合处理多阶段决策与组合优化类问题。帮助学生理解它的价值在于:既能够系统求解,又能在保证结果质量的同时提高效率。

3

案例一:爬楼梯问题中的递推思想

爬楼梯问题示意图

此处可放入台阶图、递推树、状态表或“走到第n级台阶的方法数”示意图。

爬楼梯问题是动态规划最经典也最容易理解的入门案例之一。假设每次可以爬1级或2级台阶,要求计算到达第n级台阶共有多少种不同方式。

这个问题的关键在于:到达第n级台阶的方法数,可以由到达第n-1级和第n-2级的方法数推导出来。也就是说,当前问题的结果依赖于前面较小规模问题的结果,这正体现了动态规划中的最优子结构和递推关系。

通过这个案例,学生可以很直观地理解为什么要把中间结果保存下来。因为如果每次都从头递归计算,就会出现大量重复计算;而把前面的结果记录下来,就能显著提高效率。

课堂讲解提示

① 为什么到达第n级台阶的问题可以转化为前两个台阶的问题?

② 这个问题中的“状态”应该如何定义?

③ 为什么递归方法会产生重复计算?

④ 保存中间结果后,效率提升体现在哪里?

4

案例二:0-1背包问题中的阶段决策

0-1背包问题示意图

此处可放入背包容量图、物品价值表、二维状态表或最优选择路径示意图。

0-1背包问题是动态规划中最有代表性的案例之一。给定若干物品,每个物品都有重量和价值,在背包容量有限的前提下,目标是选择若干物品使总价值最大。

这个问题之所以适合动态规划,是因为在处理每一个物品时,都会面临“选”与“不选”两种可能,而每一种决策又会影响后续剩余容量和最终价值。整个求解过程天然具有阶段性和状态转移特征。

通过这个案例,学生可以进一步理解动态规划并不是只会做简单计数,而是能够解决具有全局最优目标的组合优化问题。这也是动态规划在工程和算法竞赛中都非常重要的原因之一。

课堂讲解提示

① 为什么0-1背包问题适合按阶段来分析?

② 物品编号和剩余容量为什么可以共同构成状态?

③ “选”与“不选”分别会带来什么后果?

④ 为什么这个问题通常不能简单用贪心方法解决?

5

教学重点与难点

教学重点:动态规划的基本思想、状态设计、阶段划分和状态转移关系,以及其在最优决策问题中的作用。

教学难点:帮助学生理解动态规划真正的难点在于“如何建模”,特别是如何设计状态和写出递推关系,而不仅仅是机械套公式。

6

教学方式

采用“问题导入 + 视频讲解 + 状态建模分析 + 案例递推演示”的方式组织教学。

通过爬楼梯、背包问题等案例,让学生从简单递推逐步过渡到复杂优化场景,形成对动态规划整体框架的认识。

7

课堂活动设计

活动一:递推表填写

给出一个简单的爬楼梯或网格路径问题,让学生手工填写状态表,观察递推过程如何一步步生成最终结果,理解保存中间结果的价值。

活动二:比较不同算法思路

组织学生比较递归、贪心和动态规划在同一问题中的求解差异,讨论为什么某些问题必须依靠动态规划才能得到可靠的最优解。

8

课后任务

任务1:用自己的语言解释动态规划与递归的关系,以及为什么动态规划能够减少重复计算。

任务2:尝试从“状态、阶段、转移”三个角度描述一个简单动态规划问题。

任务3:思考在路径优化、资源分配、任务选择等场景中,动态规划为什么特别有价值。