题解 | #购物单#
购物单
https://www.nowcoder.com/practice/f9c6f980eeec43ef85be20755ddbeaf4
bag_content, num = map(int, input().split())
ths = {}
add_ths = {}
for i in range(1, num+1):
v, p, q = map(int, input().split())
if q == 0: # 主件
ths[i] = [v, p]
else:
if q in add_ths.keys():
add_ths[q].append([v, p])
else:
add_ths[q] = [[v, p]]
# print(ths, add_ths)
ths_num = len(ths)
w, v = [[]], [[]]
for key in ths:
w_temp, v_temp = [], []
w_temp.append(ths[key][0])
v_temp.append(ths[key][0]*ths[key][1])
if key in add_ths.keys():
w_temp.append(w_temp[0]+add_ths[key][0][0])
v_temp.append(v_temp[0]+add_ths[key][0][0]*add_ths[key][0][1])
if len(add_ths[key]) > 1:
w_temp.append(w_temp[0]+add_ths[key][1][0])
v_temp.append(v_temp[0]+add_ths[key][1][0]*add_ths[key][1][1])
w_temp.append(w_temp[0]+add_ths[key][0][0]+add_ths[key][1][0])
v_temp.append(v_temp[0]+add_ths[key][0][0]*add_ths[key][0][1]+add_ths[key][1][0]*add_ths[key][1][1])
w.append(w_temp)
v.append(v_temp)
# print(w,v)
dp = [[0]*(ths_num+1) for _ in range(0, bag_content//10 + 1)]
for weight in range(1, bag_content//10 + 1):
for t_num in range(1, ths_num+1):
max_i = dp[weight][t_num-1]
for n in range(len(w[t_num])):
if weight - w[t_num][n]//10 >= 0:
max_i = max(max_i, dp[weight - w[t_num][n]//10][t_num-1] + v[t_num][n])
dp[weight][t_num] = max_i
# print(dp)
print(dp[bag_content//10][ths_num])