01背包问题详解与实例.pdfVIP

  • 0
  • 0
  • 约6.48千字
  • 约 6页
  • 2026-08-11 发布于北京
  • 举报

01背包

一、知识点+例题

01背包是所有背包问题中最基础也是最重要的一个类型。

其问题可以简单描述为:对于一系列物品,给定每个物品的体积(w)和价值(v),在一定容

量限制(V)下,求最大的价值。

因为每个物品只有两种情况:选(1)或不选(0),这也是01背包名字的。

1.二维写法

这类问题的是要找到转移方程,将复杂的问题简化。

我们可以用dp[i][j]表示前i个物体、容量=j时的最大价值,那么原问题就可以看作

求dp[n][m]。

dp[i][j]的值取决于第i个物体是否被选择:

(1)如果不选择,那么其价值就会等于dp[i-1][j];

(2)如果选择,那么其价值就会等于dp[i-1][j-w[i]]+v[i];

哪个方案价值更大就选哪个,即dp[i][j]=max(dp[i-1][j],dp[i-1][j-w[i]]+v[i])。

得到转移方程后,就需要考虑递推边界了:

dp[0][j]都是0,前面的0表示没有物体,此时容量再大也没有任何价值;

dp[i][0]也都是0,后面的0表示背包容量为0,装不下东西,那价值自然也是0。

所以完整的01背包代码如下:

for(inti=1;i=n;

i+

文档评论(0)

1亿VIP精品文档

相关文档