python版本
def fn(N,m,goods):
dp = [[0 for x in range(N+1)] for y in range(m+1)]
for i,good in enumerate(goods):
if good["q"] != 0:
dp[i+1] = dp[i]
else:
gv = good["v"]
gp = good["p"]
if good["a01"] != None:
ga1v = good["a01"]["v"]
ga1p = good["a01"]["p"]
if good["a02"] != None:
ga2v = good["a02"]["v"]
ga2p = good["a02"]["p"]
for j in range(N+1):
if j < gv:
dp[i+1][j] = dp[i][j]
if j >= gv:
dp[i+1][j] = max(dp[i][j],dp[i][j-gv] + gv*gp)
if good["a01"] != None and j >= gv+ga1v:
dp[i+1][j] = max(dp[i+1][j],dp[i][j-gv-ga1v] + gv*gp + ga1v*ga1p)
if good["a02"] != None and j >= gv+ga2v:
dp[i+1][j] = max(dp[i+1][j],dp[i][j-gv-ga2v] + gv*gp + ga2v*ga2p)
if good["a02"] != None and j >= gv+ga1v+ga2v:
dp[i+1][j] = max(dp[i+1][j],dp[i][j-gv-ga1v-ga2v] + gv*gp + ga1v*ga1p + ga2v*ga2p)
return dp[m][N]
N_and_m = input().split(' ')
N = int(N_and_m[0])
N = int(N/10)
m = int(N_and_m[1])
goods = []
while True:
try:
new_good = {"a01":None,"a02":None}
good_info = input().split()
new_good["v"] = int(int(good_info[0])/10)
new_good['p'] = int(good_info[1])
new_good["q"] = int(good_info[2])
goods.append(new_good)
if int(good_info[2]) > 0 and goods[int(good_info[2])-1]["a01"] == None:
goods[int(good_info[2])-1]["a01"] = new_good
elif int(good_info[2]) > 0 and goods[int(good_info[2])-1]["a02"] == None:
goods[int(good_info[2])-1]["a02"] = new_good
except:
break
result = fn(N,m,goods)
print(result*10)