题目链接:

01背包:采药

完全背包:疯狂的采药

关于 "总体积刚好是 V " 和 ”总体积 \(\le\) V “

正常的背包推导的都是 ”总体积刚好是 V “。这一点很重要,而且大部分题问的都是这种。

”总体积 \(\le\) V “,只需要求一发前缀 \(\min\) 即可。两道例题就是这种情况,特此写下。

	F(i, 0, vmax) ans = max(ans, f[n][i]);

01背包

两种写法:

记 \(f[i][j]\) 表示前 \(i\) 个物品,总体积强制为 \(j\) 的最大价值。

	F(i, 1, n){
F(j, 0, vmax){
if(j < a[i]) f[i][j] = f[i - 1][j];
else f[i][j] = max(f[i - 1][j], f[i - 1][j - a[i]] + b[i]);
}
}

记 \(f[j]\) 表示当前考虑了前 \(i\) 个物品,总体积强制为 \(j\) 的最大价值。

	F(i, 1, n){
G(j, vmax, a[i]){
f[j] = max(f[j], f[j - a[i]] + b[i]);
}
}

思考1:为什么可以省掉物品这一维?

  • 首先,我们只关注 \(f[i - 1][0 \sim j]\) 和 \(f[i][0 \sim j]\) 的状态。(这也是滚动数组的依据)

  • 那么,我们可以用 \(f[0 \sim j]\) 更新前 和 更新后的状态分别表示 \(f[i - 1]\) 和 \(f[i]\)。

思考2:为什么一维写法要倒着枚举体积?

  • 一维写法:由于 每个物品最多选一次,因此,如果正着枚举体积,那么(根据思考1)更小的 \(j\) 已是更新后的 状态,这样再来更新当前的 \(f[j]\), 一件物品可能会被重复选择,是有问题的。

完全背包

记 \(f[i][j]\) 表示前 \(i\) 个物品,总体积强制为 \(j\) 的最大价值。

	F(i, 1, n){
F(j, 0, vmax){
if(j < a[i]) f[i & 1][j] = f[(i - 1) & 1][j];
else f[i & 1][j] = max(f[(i - 1) & 1][j], f[i & 1][j - a[i]] + b[i]);
}
}

记 \(f[j]\) 表示当前考虑了前 \(i\) 个物品,总体积强制为 \(j\) 的最大价值。

	F(i, 1, n){
F(j, a[i], vmax){
f[j] = max(f[j], f[j - a[i]] + b[i]);
}
}

思考3:为什么完全背包是正着枚举的?

  • 因为一件物品可以被选择无数次。

思考4:两种背包的二维写法有何不同?为什么?

  • 01背包是从 \(f[i - 1][j - a[i]]\) 转移来的,而完全背包是从 \(f[i][j - a[i]]\) 转移过来的。因为 \(f[i - 1]\) 始终是 一件当前物品都还没选到 的状态。

对背包dp的再探究:以 采药 和 疯狂的采药 为例的更多相关文章

  1. [USACO Section 5.3]量取牛奶 Milk Measuring (动态规划,背包$dp$)

    题目链接 Solution 完全背包 \(dp\) , 同时再加一个数组 \(v[i][j]\) 记录当总和为\(j\) 时第 \(i\) 种物品是否被选. 为保证从小到大和字典序,先将瓶子按大小排序 ...

  2. 复习1背包dp

    背包问题是对于一个有限制的容器,一般计算可以装的物品的价值最值或数量.通常每个物品都有两个属性空间和价值,有时还有数量或别的限制条件,这个因体而异. 背包大概分成3部分,下面会细述这最经典的3种题型 ...

  3. HDU 1011 树形背包(DP) Starship Troopers

    题目链接:  HDU 1011 树形背包(DP) Starship Troopers 题意:  地图中有一些房间, 每个房间有一定的bugs和得到brains的可能性值, 一个人带领m支军队从入口(房 ...

  4. bzoj5281/luogu4377 Talent Show (01分数规划+背包dp)

    就是01分数规划的思路,只不过当把w[i]-r*t[i]>0的选完以后如果w值还没达到要求,那就再01背包dp一下就好了(dp时w值>W的时候就存在W里就不会爆内存了). (跑得很慢..大 ...

  5. 【LibreOJ】#6395. 「THUPC2018」城市地铁规划 / City 背包DP+Prufer序

    [题目]#6395. 「THUPC2018」城市地铁规划 / City [题意]给定n个点要求构造一棵树,每个点的价值是一个关于点度的k次多项式,系数均为给定的\(a_0,...a_k\),求最大价值 ...

  6. UOJ #17. 【NOIP2014】飞扬的小鸟 背包DP

    #17. [NOIP2014]飞扬的小鸟 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 4902  Solved: 1879 题目连接 http:// ...

  7. 【bzoj4987】Tree 树形背包dp

    题目描述 从前有棵树. 找出K个点A1,A2,…,Ak. 使得∑dis(AiAi+1),(1<=i<=K-1)最小. 输入 第一行两个正整数n,k,表示数的顶点数和需要选出的点个数. 接下 ...

  8. 【bzoj2427】[HAOI2010]软件安装 Tarjan+树形背包dp

    题目描述 现在我们的手头有N个软件,对于一个软件i,它要占用Wi的磁盘空间,它的价值为Vi.我们希望从中选择一些软件安装到一台磁盘容量为M计算机上,使得这些软件的价值尽可能大(即Vi的和最大).但是现 ...

  9. 算法复习——背包dp

    1.01背包 二维递推式子: 代码: ;i<=n;i++) ;x--) ][x-w[i]]+c[i],f[i-][x]); ][x]; printf("%d",f[n][m] ...

  10. 背包DP HDOJ 5410 CRB and His Birthday

    题目传送门 题意:有n个商店,有m金钱,一个商店买x件商品需要x*w[i]的金钱,得到a[i] * x + b[i]件商品(x > 0),问最多能买到多少件商品 01背包+完全背包:首先x == ...

随机推荐

  1. 2024-08-14:用go语言,给定两个长度分别为n和m的整数数组nums和changeIndices,下标从1开始。初始时,nums 中所有下标均未标记。 从第1秒到第m秒,每秒可以选择以下四种操

    2024-08-14:用go语言,给定两个长度分别为n和m的整数数组nums和changeIndices,下标从1开始.初始时,nums 中所有下标均未标记. 从第1秒到第m秒,每秒可以选择以下四种操 ...

  2. 20-canvas之形变

    1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="U ...

  3. manim边学边做--圆形类

    在manim的丰富图形库中,圆形类是一个基础且强大的模块.无论是简单的圆形绘制,还是复杂的圆形变换,它都能以简洁的代码实现. manim中圆形类的相关模块主要有3个: Circle:标准的圆形 Ann ...

  4. dubbo序列化问题(三)子类覆盖父类字段hession反序列化获取不到 转

    在进行dubbo开发中遇到一个问题,当是用hession2进行序列化时,子类和父类有相同的字段时,hession2反序列化获取不到该字段数据,如下: import java.io.Serializab ...

  5. Win32_GDI_绘制文字路径透明窗口

    效果图: 前面字体是个透明窗口 后面是桌面背景 代码实现: void MyMainDialog::TextPathWindow(LPCTSTR lpShowText) { HDC hdc = GetD ...

  6. stm32学习之调试篇踩坑记录

    如何下载fml文件 找不到64k的fml文件 could not stop cortex-m device:无法连接,我当时是在程序中的一些初始化函数中,有几条语句禁用了(JTAG+SW) 接线顺序, ...

  7. Windows 不小心把管理员帐户弄没了怎么办

    今天折腾不小心把管理员帐号的权限给改没了,重启之后很多操作做不了.解决方法如下: Windows + R 打开运行,或者打开资源管理器,输入 control userpasswords2 命令打开用户 ...

  8. Honor X20 忽然不能与Android Studio 连接

    背景:前一天还正常使用,可以连接Android Studio,第二天就连不上了 已知:数据线没问题,驱动没问题,设备开了开发者模式,连接上电脑时会提示已连接USB调试, 测试过程:(点击撤销USB调试 ...

  9. 使用kamailio进行分机注册及互拨

    操作系统版本:Debian 12.5_x64 kamailio版本:5.8.2 kamailio作为专业的SIP服务器,可承担注册服务器的角色.今天记录下kamailio作为注册服务器,承接分机注册, ...

  10. Qemu - 介绍

    Ref: QEMU支持3种运行模式 -- 理解 https://www.minitool.com/partition-disk/qemu-for-windows.html