From 25a9c76f32570ccfaaad65ea8f0ce609d91df365 Mon Sep 17 00:00:00 2001 From: krahets Date: Thu, 6 Jul 2023 04:09:15 +0800 Subject: [PATCH] deploy --- .../knapsack_problem/index.html | 34 +++++++++--------- chapter_heap/top_k/index.html | 15 +++++++- search/search_index.json | 2 +- sitemap.xml.gz | Bin 823 -> 823 bytes 4 files changed, 32 insertions(+), 19 deletions(-) diff --git a/chapter_dynamic_programming/knapsack_problem/index.html b/chapter_dynamic_programming/knapsack_problem/index.html index aad722510..f1513a316 100644 --- a/chapter_dynamic_programming/knapsack_problem/index.html +++ b/chapter_dynamic_programming/knapsack_problem/index.html @@ -2214,25 +2214,23 @@

13.3.   0-1 背包问题

-

背包问题是学习动态规划的一个非常好的入门题目,其涉及到“选择与不选择”和“限制条件下的最优化”等问题,是动态规划中最常见的问题形式。

-

背包问题具有很多变种,例如 0-1 背包问题、完全背包问题、多重背包问题等。在本节中,我们先来学习最简单的 0-1 背包问题。

+

背包问题是一个非常好的动态规划入门题目,是动态规划中最常见的问题形式。其具有很多变种,例如 0-1 背包问题、完全背包问题、多重背包问题等。

+

在本节中,我们先来学习基础的的 0-1 背包问题。

Question

给定 \(n\) 个物品,第 \(i\) 个物品的重量为 \(wgt[i-1]\) 、价值为 \(val[i-1]\) ,现在有个容量为 \(cap\) 的背包,请求解在不超过背包容量下背包中物品的最大价值。

-

请注意,物品编号 \(i\)\(1\) 开始计数,但数组索引从 \(0\) 开始计数,因此物品 \(i\) 对应重量 \(wgt[i-1]\) 和价值 \(val[i-1]\)

+

请注意,物品编号 \(i\)\(1\) 开始计数,数组索引从 \(0\) 开始计数,因此物品 \(i\) 对应重量 \(wgt[i-1]\) 和价值 \(val[i-1]\)

下图给出了一个 0-1 背包的示例数据,背包内的最大价值为 \(220\)

0-1 背包的示例数据

Fig. 0-1 背包的示例数据

-

接下来,我们仍然先从回溯角度入手,先给出暴力搜索解法;再引入记忆化处理,得到记忆化搜索和动态规划解法。

-

13.3.1.   方法一:暴力搜索

-

0-1 背包问题是一道典型的“选或不选”的问题,0 代表不选、1 代表选。我们可以将 0-1 背包看作是一个由 \(n\) 轮决策组成的搜索过程,对于每个物体都有不放入和放入两种决策。不放入背包,背包容量不变;放入背包,背包容量减小。由此可得:

+

在 0-1 背包问题中,每个物体都有不放入和放入两种决策。不放入背包,背包容量不变;放入背包,背包容量减小。由此可得:

-

当我们做出物品 \(i\) 的决策后,剩余的是前 \(i-1\) 个物品的子问题,因此状态转移分为两种:

+

我们可以将 0-1 背包求解过程看作是一个由 \(n\) 轮决策组成的过程。从物品 \(n\) 开始,当我们做出物品 \(i\) 的决策后,剩余的是前 \(i-1\) 个物品的决策。因此,状态转移分为两种情况: