C++编程《第19课 01背包》教学课件.pptxVIP

  • 2
  • 0
  • 约3.98千字
  • 约 26页
  • 2026-03-10 发布于广西
  • 举报

第19课01背包

学习目标熟悉了解01背包问题掌握01背包问题模型

知识讲授

01背包问题有N件物品和一个容量为V的背包。第i件物品的体积是v[i],价值是c[i]。求解将这些物品装入背包可以获得的最大价值是多少。例:背包容量为10,一共4件物品c[i] 2347v[i] 1359以上4件物品放入容积为10的背包的最大价值为多少?

问题分析1.针对每一个物品,我们都有两种选择:放和不放。2.我们用dp[i][j]表示前i件物品放入容积为j的背包中的最大价值。3.针对第i件物品,如果v[i]小于背包的容积有两种方案:1).放入背包,则可以得到的价值是dp[i-1][j-v[i]]+c[i]。它表示前i-1件物品放入容积为j-c[i]的背包的最大价值。(要放入第i件物品,留给前i-1件物品的空间就是j-v[i])2).不放入背包,则可以得到的最大价值是dp[i-1][j]。它表示前i-1件物品放入容积为v的背包的最大价值。(不放入第i件物品,所以留给前i-1件物品的背包空间就是j)若v[i]大于背包容积,则无法放入:dp[i][j]=dp[i-1][j]

问题分析针对可以放入的情况,我们只需要取放和不放两种方案中的最大值,即可得到dp[i][j]的值。4.我们可以得到如下的状态转移方程:dp[i][j]=max(dp[i-1][j],dp[i-1]

文档评论(0)

1亿VIP精品文档

相关文档