- 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)