转-背包九讲
dd大佬的背包九讲系列文章,内容全部搬运。
iwts_poi
个人博客:https://iwts.github.io/
展开
-
背包九讲(0)- 写在之前
关于这一系列博文首先表示一下这套背包九讲应该大概可能是网传的那套背包九讲。博主并没有搜到原作者最早发布的平台,只找到了一个转发的平台,链接如下:看云-背包问题九讲这个平台风格还是非常漂亮的(比CSDN好),看着很舒服,推荐大家从这个网站看,并且目录连接都做的挺好。开头提到了原作者(dd_engi)以及发表平台,然而全部挂掉(并且有一个变成了某和谐网站)。所以不知道会不会跟当前最新的有区别。另外原作...转载 2018-05-03 18:34:12 · 208 阅读 · 0 评论 -
背包九讲(0.5)- 前言
原文出处(已挂)http://love-oriented.com/pack前言本篇文章是我(dd_engi)正在进行中的一个雄心勃勃的写作计划的一部分,这个计划的内容是写作一份较为完善的NOIP难度的动态规划总结,名为《解动态规划题的基本思考方式》。现在你看到的是这个写作计划最先发布的一部分。背包问题是一个经典的动态规划模型。它既简单形象容易理解,又在某种程度上能够揭示动态规划的本质,故不少教材都...转载 2018-05-03 18:45:41 · 128 阅读 · 0 评论 -
背包九讲(一)- 01背包问题
题目有N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使价值总和最大。基本思路这是最基础的背包问题,特点是:每种物品仅有一件,可以选择放或不放。用子问题定义状态:即f[i][v]表示前i件物品恰放入一个容量为v的背包可以获得的最大价值。则其状态转移方程便是:f[i][v]=max{f[i-1][v],f[i-1][v-c[i]]+w[i]}这个方程...转载 2018-05-03 18:58:32 · 237 阅读 · 0 评论 -
背包九讲(二) - 完全背包问题
题目有N种物品和一个容量为V的背包,每种物品都有无限件可用。第i种物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。基本思路这个问题非常类似于01背包问题,所不同的是每种物品有无限件。也就是从每种物品的角度考虑,与它相关的策略已并非取或不取两种,而是有取0件、取1件、取2件……等很多种。如果仍然按照解01背包时的思路,令f[i][v]...转载 2018-05-12 15:04:16 · 714 阅读 · 0 评论 -
背包九讲 (三) - 多重背包问题
问题有N种物品和一个容量为V的背包。第i种物品最多有n[i]件可用,每件费用是c[i],价值是w[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。基本算法这题目和完全背包问题很类似。基本的方程只需将完全背包问题的方程略微一改即可,因为对于第i种物品有n[i]+1种策略:取0件,取1件……取n[i]件。令f[i][v]表示前i种物品恰放入一个容量为v的背包的最大权值...转载 2018-05-23 22:38:04 · 229 阅读 · 0 评论 -
背包九讲 (四) - 混合三种背包问题
问题如果将“01背包问题”、“完全背包问题”、“多重背包问题”混合起来。也就是说,有的物品只可以取一次(01背包),有的物品可以取无限次(完全背包),有的物品可以取的次数有一个上限(多重背包)。应该怎么求解呢?01背包与完全背包的混合考虑到在“01背包问题”、“完全背包问题”中给出的伪代码只有一处不同,故如果只有两类物品:一类物品只能取一次,另一类物品可以取无限次,那么只需在对每个物品应用转移方程...转载 2018-06-05 19:14:33 · 264 阅读 · 0 评论 -
背包九讲(五)- 二维费用的背包问题
问题二维费用的背包问题是指:对于每件物品,具有两种不同的费用;选择这件物品必须同时付出这两种代价;对于每种代价都有一个可付出的最大值(背包容量)。问怎样选择物品可以得到最大的价值。设这两种代价分别为代价1和代价2,第i件物品所需的两种代价分别为a[i]和b[i]。两种代价可付出的最大值(两种背包容量)分别为V和U。物品的价值为w[i]。算法费用加了一维,只需状态也加一维即可。设f[i][v][u]...转载 2018-06-19 21:03:29 · 407 阅读 · 0 评论 -
背包九讲(六) 分组的背包问题
问题 有N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。这些物品被划分为若干组,每组中的物品互相冲突,最多选一件。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。算法 这个问题变成了每组物品有若干种策略:是选择本组的某一件,还是一件都不选。也就是说设f[k][v]表示前k组物品花费费用v能取得的最大权值,...转载 2018-10-04 19:45:29 · 413 阅读 · 0 评论 -
背包九讲(七) 有依赖的背包问题
简化的问题 这种背包问题的物品间存在某种“依赖”的关系。也就是说,i依赖于j,表示若选物品i,则必须选物品j。为了简化起见,我们先设没有某个物品既依赖于别的物品,又被别的物品所依赖;另外,没有某件物品同时依赖多件物品。算法 这个问题由NOIP2006金明的预算方案一题扩展而来。遵从该题的提法,将不依赖于别的物品的物品称为“主件”,依赖于某主件的物品称为“附件...转载 2018-10-04 19:54:23 · 710 阅读 · 0 评论 -
背包九讲(八) 泛化物品
定义 考虑这样一种物品,它并没有固定的费用和价值,而是它的价值随着你分配给它的费用而变化。这就是泛化物品的概念。 更严格的定义之。在背包容量为V的背包问题中,泛化物品是一个定义域为0..V中的整数的函数h,当分配给它的费用为v时,能得到的价值就是h(v)。 这个定义有一点点抽象,另一种理解是一个泛化物品就是一个数组h[0..V],给它费用v,可...转载 2018-10-04 20:03:27 · 402 阅读 · 0 评论 -
背包九讲(九) 背包问题问法的变化
以上涉及的各种背包问题都是要求在背包容量(费用)的限制下求可以取到的最大价值,但背包问题还有很多种灵活的问法,在这里值得提一下。但是我认为,只要深入理解了求背包问题最大价值的方法,即使问法变化了,也是不难想出算法的。 例如,求解最多可以放多少件物品或者最多可以装满多少背包的空间。这都可以根据具体问题利用前面的方程求出所有状态的值(f数组)之后得到。 ...转载 2018-10-04 20:17:24 · 270 阅读 · 0 评论 -
背包九讲-附录(一) USACO中的背包问题
USACO是USA Computing Olympiad的简称,它组织了很多面向全球的计算机竞赛活动。 USACO Trainng是一个很适合初学者的题库,我认为它的特色是题目质量高,循序渐进,还配有不错的课文和题目分析。其中关于背包问题的那篇课文 (TEXT Knapsack Problems) 也值得一看。 另外,USACO Contest是...转载 2018-10-04 20:26:19 · 184 阅读 · 0 评论 -
背包九讲-附录(二) 背包问题的搜索解法
《背包问题九讲》的本意是将背包问题作为动态规划问题中的一类进行讲解。但鉴于的确有一些背包问题只能用搜索来解,所以这里也对用搜索解背包问题做简单介绍。大部分以01背包为例,其它的应该可以触类旁通。简单的深搜 对于01背包问题,简单的深搜的复杂度是O(2^N)。就是枚举出所有2^N种将物品放入背包的方案,然后找最优解。基本框架如下:procedure Sea...转载 2018-10-04 20:31:37 · 194 阅读 · 0 评论 -
背包九讲-联系方式
如果有任何意见和建议,特别是文章的错误和不足,或者希望为文章添加新的材料,可以通过http://kontactr.com/user/tianyi/这个网页联系我。 值得说明的是,如果有OI方面的问题,例如不明白自己的程序为什么错了或者索要某种算法的源代码,使用这个联系方式可能得不到及时解答。请在OIBH论坛发问。...转载 2018-10-04 20:33:36 · 166 阅读 · 0 评论 -
背包九讲-致谢
感谢一下名单:阿坦 jason911 donglixp LeafDuo他们每人都最先指出了本文曾经存在的某个并非无关紧要的错误。谢谢你们如此仔细地阅读拙作并弥补我的疏漏。 感谢 XiaQ,它针对本文的第一个beta版发表了用词严厉的六条建议,虽然我只认同并采纳了其中的两条。在所有读者几乎一边倒的赞扬将我包围的当时,你的贴子是我的一剂清醒剂,让我能清醒...转载 2018-10-04 20:39:13 · 141 阅读 · 0 评论