AcWing 9. 分组背包问题
原题链接
中等
作者:
Actor丶
,
2020-01-27 13:59:20
,
所有人可见
,
阅读 890
# # 输入样例
N, V = map(int,input().split()) # N表示物品组数,V表示背包容量
v_arr = [[] for i in range(N)]
w_arr = [[] for i in range(N)]
s_arr = [] # 存储每组物品数量
for i in range(N):
s_arr.append(int(input().strip()))
for j in range(s_arr[i]):
in_li = list(map(int, input().split()))
v_arr[i].append(in_li[0])
w_arr[i].append(in_li[1])
dp = [0 for i in range(V+1)] # 出错,范围是[0,V],而不是[0,N]
for i in range(1,N+1):
for j in range(V,0,-1):
for s in range(s_arr[i-1]):
if j>=v_arr[i-1][s-1]:
dp[j] = max(dp[j], dp[j-v_arr[i-1][s-1]] + w_arr[i-1][s-1])
print(dp[-1])