AcWing 9. 分组背包问题 python3
原题链接
中等
作者:
戈好雨
,
2019-09-30 16:02:46
,
所有人可见
,
阅读 797
import copy
N,V = map(int,input().split())
s,l,v,w,f,a = [],[0 for i in range(101)],[],[],[],[0 for i in range(V+1)]
for i in range(N+1):
v.append(copy.deepcopy(l))
w = copy.deepcopy(v)
for i in range(N+1):
f.append(copy.deepcopy(a))
for i in range(1,N+1):
s.append(int(input()))
for j in range(1,s[-1]+1):
v[i][j],w[i][j] = map(int,input().split())
for k in range(1,V+1):
for i in range(1,N+1):
if min(v[i])>k:f[i][k]=f[i-1][k]
else:
wij = [0]
for j in range(1,s[i-1]+1):
if v[i][j]<=k:
wij.append(f[i-1][k-v[i][j]]+w[i][j])
maxwij = max(wij)
f[i][k] = max(maxwij,f[i-1][k])
print(f[N][V])