From 96347af47a1f8ee28fa5c7d83c12f6f1b83e9dc1 Mon Sep 17 00:00:00 2001 From: haofeng <852172305@qq.com> Date: Mon, 14 Jun 2021 12:58:03 +0800 Subject: [PATCH] =?UTF-8?q?Update=20=E8=83=8C=E5=8C=85=E9=97=AE=E9=A2=98?= =?UTF-8?q?=E7=90=86=E8=AE=BA=E5=9F=BA=E7=A1=80=E5=A4=9A=E9=87=8D=E8=83=8C?= =?UTF-8?q?=E5=8C=85.md=20=E6=B7=BB=E5=8A=A0=20python3=20=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../背包问题理论基础多重背包.md | 49 ++++++++++++++++++- 1 file changed, 48 insertions(+), 1 deletion(-) diff --git a/problems/背包问题理论基础多重背包.md b/problems/背包问题理论基础多重背包.md index 26890a2b..e14575d4 100644 --- a/problems/背包问题理论基础多重背包.md +++ b/problems/背包问题理论基础多重背包.md @@ -147,9 +147,56 @@ int main() { Java: - Python: +```python +def test_multi_pack1(): + '''版本一:改变物品数量为01背包格式''' + weight = [1, 3, 4] + value = [15, 20, 30] + nums = [2, 3, 2] + bag_weight = 10 + for i in range(len(nums)): + # 将物品展开数量为1 + while nums[i] > 1: + weight.append(weight[i]) + value.append(value[i]) + nums[i] -= 1 + + dp = [0]*(bag_weight + 1) + # 遍历物品 + for i in range(len(weight)): + # 遍历背包 + for j in range(bag_weight, weight[i] - 1, -1): + dp[j] = max(dp[j], dp[j - weight[i]] + value[i]) + + print(" ".join(map(str, dp))) + +def test_multi_pack2(): + '''版本:改变遍历个数''' + weight = [1, 3, 4] + value = [15, 20, 30] + nums = [2, 3, 2] + bag_weight = 10 + + dp = [0]*(bag_weight + 1) + for i in range(len(weight)): + for j in range(bag_weight, weight[i] - 1, -1): + # 以上是01背包,加上遍历个数 + for k in range(1, nums[i] + 1): + if j - k*weight[i] >= 0: + dp[j] = max(dp[j], dp[j - k*weight[i]] + k*value[i]) + + print(" ".join(map(str, dp))) + + +if __name__ == '__main__': + test_multi_pack1() + test_multi_pack2() +``` + + + Go: