C++编程《第19课 01背包》教学设计.docxVIP

  • 1
  • 0
  • 约3.56千字
  • 约 6页
  • 2026-03-10 发布于广西
  • 举报

PAGE

PAGE1

01背包

教学目标

1.知识与技能

熟悉了解01背包问题

掌握01背包问题模型.

2.过程与方法:

学习流程:讲授——模仿——练习

通过课堂练习,巩固课堂内容。

教学重点、难点

【重点】

01背包状态转移方程

01背包问题求解模板

完全背包状态转移方程

完全背包问题求解模板

【难点】

01背包问题建模和状态转移分析

完全背包问题建模和状态转移分析

课时安排

课时安排:120分钟

四、上课准备

课程相关ppt、白板、白板笔、积分卡

课前检查电脑、投影仪、网络是否有故障,及时修复。

五、教学活动

活动时长

教学活动

注意事项

课前准备

老师准备学生电脑,保证电脑能正常使用;打开投影仪,打开上课课件,以最饱满的热情迎接学生!

提前10分钟准备

开场白

欢迎各位同学回到吉码信息学课堂。

引入

今天我们介绍一类动态规划的问题,这种问题比较难想到解决方案,但经常用到。

学习内容(1)

ppt501背包问题介绍

按照示例,讲解01背包的问题描述。

如果用枚举的方法来解决这个问题,我们只需要枚举所有的组合方式,再从中选择最优方案即可。枚举所有的组合,意味着决定某件物品选还是不选。如果选,那么我们用1标记,如果不选,那么用0标记,这就是01背包问题名称的来由。

4种物品的组合情况:

0000

0001

0010

0011

0100

0101

0110

0111

1000

1001

1010

1011

1100

1101

1110

1111

一共16种,其实可以用二进制枚举的办法来解决,但复杂度是2^n,根本处理不了多少物品。这个问题如果用动态规划怎么解决呢?

ppt6动态规划法分析01背包问题

1、问题建模,确定参数,分析如何划分为子问题。

①考虑最终状态,n件物品,背包容量V,此时,容量V的背包内,放了价值为Cn的物品,物品总体积为Vn,因为Vn不确定,我们不如把状态描述为:价值为Cn的物品放进了容量为V的背包的问题的解——这个是原问题。

记为dp[n][V]

②那么原问题是最终状态,他的前一个状态是什么呢?

考虑Cn和V两个参数的变化。Cn是n件物品全部放进背包中。首先我们确定,选中的n件物品放入背包的顺序是无关的,所以我们可以考虑前n件物品都处理完毕了,就是问题的解。那么第n件物品还未处理,处理完第n-1件物品时,就是前一个状态吗?未必哦!因为还有一个参数Vn存在。

我们考虑第n个物品的两种处理方式,第一是选择第n个物品,第二是不选。

如果选择第n个物品,那么价值就会增加,体积也会增加,他的前一个价值就是:

dp[n][V]=cn+dp[n-1][V-vn]

如果不选择第n个物品,那么价值不会增加,体积也不会增加,

dp[n][V]=dp[n-1][V]

很明显,我们要选择大的那个。同时,我们要决定第n个物品如果不能放入背包,就只能选择dp[n-1][V]。

我们把这个关系推广到Vi:

dp[i][Vi]=max(ci+dp[i-1][Vi-vi],dp[i-1][Vi])

化为二维数组的表达就是这样:

dp[i][j]=max(dp[i-1][j-v[i]]+c[i],dp[i-1][j])

观看ppt67,对比刚才的分析过程和结果

播放和讲解ppt8,9,10,11,12.讲解计算过程和程序

ppt14课堂练习1

留时间给学生独立完成

学习内容(2)

ppt1617状态压缩的尝试

根据计算的过程,我们可以发现,计算dp[i][j]时,只与第i-1行数据有关。而且,每一行我们最终只取一个状态的值而已。看这两个式子:

要么dp[i][j]=dp[i-1][j]

要么dp[i][j]=dp[i-1][j-v[i]]+c[i]

如果我们把其中一个状态不记录在数组内,只采用数字i来记录状态的层次:

dp[j]=max(dp[j],dp[j-v[i]]+c[i])

这样把二维的数据压缩到一维数组中,多个状态混合压缩在一起,能不能解决问题呢?

ppt18-22状态压缩后的程序实现以及执行过程演示。

我们将示例程序运行一遍,然后和未做压缩前的程序比较。如果内层循环取逆序,则能得到01背包的正确解;但如果内存循环取顺序,则不能得到01背包的正确解!

比较逆序循环和和顺序循环的求解过程,发现顺序循环时在决策是会把物品多次放入背包中然后再做状态转移。对比最后的结果,发现恰好是全部装满性价比最高的物品(v[1]=1,c[1]=2,性价比最高)时的结果,这时候需要不限制物品的数量。这恰恰就是“完全背包问题”的解!这真是一个美妙的“结论”!善于寻根究底的同学就又掌握一种问题的求解法啦

文档评论(0)

1亿VIP精品文档

相关文档