首页 > 其他分享 >背包九讲--阅读笔记

背包九讲--阅读笔记

时间:2024-05-31 11:11:08浏览次数:13  
标签:背包 主件 九讲 -- max 枚举 物品 考虑

背包九讲

很古老的文章, from 2007, 比我年龄都大。 但是确实写得很好。

01背包

很基础。 设 \(f[i][j]\) 为考虑前 \(i\) 个物品, 背包容量为 \(j\) 的最大价值。

$f[i][j] = max { f[i - 1][j], f[i - 1][j - w[i]] + c[i] } $

考虑可以滚动数组, 但更高妙的, 是倒序枚举 \(j\), 即:

$f[j] = max { f[j], f[j - w[i]] + c[i] } $

完全背包

\(f[i][j] = max\{f[i][j], f[i][j - w[i]] + c[i]\}\)

典中典, 考虑滚动数组, 因为我们要在 \(f[i][j - w[i]], f[i][j]\) 的基础上决策, 所以正序枚举。

多重背包

每个物品可以选 \(k[i]\) 个, 考虑这个限制, 先当成 01 背包做。

\(f[i][j] = max\{f[i - 1][j], f[i - 1][j - k * w[i]] + k * c[i]\}\)

同样可以滚动数组, 优化时间复杂度的话可以二进制拆分。

分组背包

我觉得这是很妙的一个背包, 限制每个组最多选一个物品。

设 \(f[i][j]\) 表示考虑前 \(i\) 组的物品, 背包容量为 \(j\) 的最大价值。

\(f[i][j] = max\{f[i - 1][j], f[i - 1][j - w[k]] + c[k]\}\)

有依赖的背包

考虑简单情况, 有若干个主件, 每个主件有若干个附件, 要想选附件必须先选择主件, 求最大价值。

考虑枚举的思路, 每个主件选哪些附件一共有 \(2^n\) 种策略,我们要在这些策略中选出一个最优的, 那这不是分组背包? 但是 \(2^n\) 个物品是难以承受的, 但是, 我们可以抽象一点, 先在附件里算 01 背包, 然后就可以得到 \(V - w[i]\) 个物品, 可以承受。 \(w[i]\) 是主件容量。

这其实是很重要思想, 后面在泛化背包里会讲到。 然后我们就可以在若干个阻力算分组背包了。

再复杂一点, 依赖关系构成一课树, 要想选儿子, 必须选爸爸。 其实就是树形DP, 但是用背包去理解的我觉得更加深刻了。

考虑每一棵子树。 设 \(f[u][i][j]\) 表示考虑 \(u\) 的前 \(i\) 个儿子, 容量为 \(j\) 的最大价值。
我们依旧是把 \(f[v][num_son][i]\) 当成 \(v\) 这个组别里的 \(V\) 个物品, 然后就是分组背包。

\(f[u][i][j] = max\{f[u][i - 1][j], f[u][i - 1][j - k] + f[v][num_son][k]\}\)

考虑滚动数组, 可以把第二维滚掉, 倒序枚举即可。
则有
\(f[u][j] = max\{f[u][j], f[u][j - k] + f[v][k]\}\)

是不是很熟悉的树型DP。

泛化物品

考虑一个物品是固定的 \(w\), \(c\)。 前面提到可以把 \(f[i][v]\) 当成新的物品。 这些我们都可以抽象成一个函数, 函数上的点就是需要考虑的, 这样子理解就可以把他们都当成物品, 从逻辑上就会清晰易懂一些。

标签:背包,主件,九讲,--,max,枚举,物品,考虑
From: https://www.cnblogs.com/qerrj/p/18224106

相关文章

  • 创新实训(一)
    前言智谱AI发布了最新的代码模型CodeGeeX2-6B(https://mp.weixin.qq.com/s/qw31ThM4AjG6RrjNwsfZwg),并已在魔搭社区开源。CodeGeeX2作为多语言代码生成模型CodeGeeX的第二代模型,使用ChatGLM2架构注入代码实现,具有多种特性,如更强大的代码能力、更优秀的模型特性、更全面的AI编程......
  • delphi 图形图像处理 Image32
    delpher 越来越少了,但不能掩盖它的优秀,很外前看到了Image32,但发现用它的人很少,这段时间整理了它的资料,重新组合了一个DEMO,也可以说是个小工具,分享出来。----下面的内容不能直接从WORD中复制过来,只能一点点粘贴,Image32 关于Image32说明文档是这样描述的:  用Delphi......
  • 基于BeautifulSoup实现pubmed文献摘要的爬虫与无格式输出
    一、实现背景        为了满足项目数据集的构造,我们需要针对各领域医学文献的摘要进行爬取工作,因此编写了pubmed的文献摘要爬虫代码。代码基于python语言,可使用pycharm直接运行,同时基于BeautifulSoup库实现了解析HTML,为了获取纯文本内容,输出结果是以各个文献在pubmed......
  • [机器学习]-如何在 MacBook 上安装 LLama.cpp + LLM Model 运行环境
    如何在MacBook上安装LLama.cpp+LLMModel运行环境1.问题与需求近段时间想学习一下大语言模型的本地化部署与应用。首先遇到的就是部署硬件环境的问题。我自己的笔记本是一台MacBookProM3,没有Nvidia的GPU支持,但机器性能不错。所以打算根据网上资料尝试在自己......
  • 安全模型架构
    安全模型架构:一个业务系统往往包括很多部分和层面,每一个部分和层面都可能存在安全漏洞从而成为被攻击的对象,每个层面和部份应该提供相应的安全方案来保护业务系统的安全,根据产品的分层思想,安全技术可以分为四个主要的层欠:应用层安全、系统层安全、网络层安全、物理层安全(暂......
  • 能源SCI期刊,中科院4区,审稿快,IF=3.858
    一、期刊名称FrontiersinEnergyResearch二、期刊简介概况期刊类型:SCI学科领域:能源影响因子:3.858中科院分区:4区三、期刊征稿范围能源研究前沿出版了整个领域的严格同行评审研究,重点是可持续和环境的发展和技术。该杂志特别关注支持可持续发展目标的技术进步:为所......
  • 计算机SCI期刊,中科院3区,IF=3.7,录用难度不大
    一、期刊名称Computing二、期刊简介概况期刊类型:SCI学科领域:计算机科学影响因子:3.7中科院分区:3区三、期刊征稿范围期刊发表关于所有计算领域的原创论文、简短通信和调查。贡献应以英文撰写,可以是理论性的或应用性的,基本标准是计算相关性和结果的系统基础。主题......
  • 网络通信SCI期刊,中科院2区,IF=7.9,国产期刊,影响力高,口碑佳
    一、期刊名称Digital Communications andNetworks二、期刊简介概况期刊类型:SCI学科领域:网络通信影响因子:7.9中科院分区:2区出版方式:开放出版三、期刊征稿范围《数字通信与网络》与科爱出版社和重庆邮电大学合作出版季刊,该期刊发表严格的同行评审和高质量的原创......
  • 【科普向】【文末附gpt升级秘笈】《庆余年》凤冠之工艺探究——Blender建模与3D打印之
    《庆余年》凤冠之工艺探究——Blender建模与3D打印之奥秘一、引言昔者,《庆余年》之热播,引发天下观众之热议。今者,其续作《庆余年2》之中,一场盛大的婚礼更是瞩目。而此婚礼之上,唯一之凤冠,竟出自一款名为Blender之软件之手,辅以3D打印之技术,成就其非凡之美。夫此软件,诞生于三十......
  • java入门基础语法--抽象与接口(详细)
    前言Hello,大家好!很开心与你们在这里相遇,我是一个喜欢文字、喜欢有趣的灵魂、喜欢探索一切有趣事物的女孩,想与你们共同学习、探索关于IT的相关知识,希望我们可以一路陪伴~1.抽象什么是抽象父类中的方法,被它的子类们重写,子类各自的实现都不尽相同。那么父类的方法声明和......