9. 分组背包问题

摘要
Title: 9. 分组背包问题
Tag: 分组背包
Memory Limit: 64 MB
Time Limit: 1000 ms

Powered by:NEFU AB-IN

Link

9. 分组背包问题

  • 题意

    有 N 组物品和一个容量是 V 的背包。
    每组物品有若干个,同一组内的物品最多只能选一个。
    每件物品的体积是 vij,价值是 wij,其中 i 是组号,j 是组内编号。
    求解将哪些物品装入背包,可使物品总体积不超过背包容量,且总价值最大。
    输出最大价值。

  • 思路

    分组背包:第i组物品最多选1个
    img

  • 代码

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    '''
    Author: NEFU AB-IN
    Date: 2022-03-06 15:42:55
    FilePath: \ACM\Acwing\9.py
    LastEditTime: 2022-03-06 15:42:56
    '''
    N = 110

    v, w = [[0] * N for _ in range(N)], [[0] * N for _ in range(N)]
    s, dp = [0] * N, [0] * N
    n, m = map(int, input().split())

    for i in range(1, n + 1):
    s[i] = int(input())
    for j in range(1, s[i] + 1):
    v[i][j], w[i][j] = map(int, input().split())

    for i in range(1, n + 1):
    for j in range(m, -1, -1):
    for k in range(1, s[i] + 1):
    if j - v[i][k] >= 0:
    dp[j] = max(dp[j], dp[j - v[i][k]] + w[i][k])

    print(dp[m])

使用搜索:谷歌必应百度