30,419
社区成员
发帖
与我相关
我的任务
分享

n,m = map(int,input().split())
N=12010
M=2010
v=[0 for i in range(N)]
w=[0 for i in range(N)]
dp=[0 for i in range(M)]
cnt=0 # 分组的组别
for i in range(1,n+1):
a,b,s=map(int,input().split())
k=1 # 组别里的个数
while k<=s:
cnt+=1 #组别先增加
v[cnt]=a*k # 整体体积
w[cnt]=b*k # 整体价值
s-=k
k*=2 # 组别的个数需要增加
if s>0:
cnt+=1
v[cnt]=a*s
w[cnt]=b*s
n=cnt # 枚举次数正式由个数变成组别数
#01背包一维优化
for i in range(1,n+1):
for j in range(m,0,-1):
if j>=v[i]:
dp[j]=max(dp[j],dp[j-v[i]]+w[i])
print(dp[m])