n,m=map(int,input().split())
W=[]
V=[]
#转化为01背包问题,同时减少重复的数据,降低时间复杂度
for i in range(n):
a,b,c=map(int,input().split())
q=min(m//a,c)
p=1
while q>p:
W.append(a*p)
V.append(b*p)
q-=p
p*=2
W.append(a*q)
V.append(b*q)
#同01背包解法
n=len(W)
dp=[0]*(m+1)
for i in range(n):
for j in range(m,W[i]-1,-1):
dp[j]=max(dp[j],dp[j-W[i]]+V[i])
print(dp[m])
0.0分
0 人评分
C语言考试练习题_排列 (C++代码)浏览:628 |
震宇大神的杀毒软件 (C语言代码)浏览:1240 |
C语言程序设计教程(第三版)课后习题1.6 (C语言代码)浏览:583 |
C语言程序设计教程(第三版)课后习题5.4 (C语言代码)浏览:1294 |
C语言程序设计教程(第三版)课后习题9.10 (C语言代码)浏览:548 |
printf基础练习2 (C语言代码)浏览:746 |
母牛的故事 (C语言代码)浏览:715 |
简单的a+b (C语言代码)浏览:572 |
剪刀石头布 (C++代码)浏览:1703 |
矩形面积交 (C语言代码)浏览:1294 |