题解 | #购物单#
购物单
https://www.nowcoder.com/practice/f9c6f980eeec43ef85be20755ddbeaf4
n,m=map(int,input().split())
primary={}
for i in range(1,m+1):
v,p,q=map(int,input().split())
if q==0 and i not in primary:
primary[i]=[[v,p]]
elif q!=0 and q not in primary:
primary[q]=[[0,0]]
primary[q].append([v,p] )
elif q!=0 and q in primary:
primary[q].append([v,p] )
else:
primary[i][0]=[v,p]
m=len(primary)
v=[[]]
w=[[]]
for key in primary:
v_temp=[primary[key][0][0]]
w_temp=[primary[key][0][0]*primary[key][0][1]]
if len(primary[key])>1:
v_temp.append(primary[key][1][0]+primary[key][0][0])
w_temp.append(primary[key][1][0]*primary[key][1][1]+primary[key][0][0]*primary[key][0][1])
if len(primary[key])==3:
v_temp.append(primary[key][0][0]+primary[key][2][0])
v_temp.append(primary[key][1][0]+primary[key][0][0]+primary[key][2][0])
w_temp.append(primary[key][0][0]*primary[key][0][1]+primary[key][2][0]*primary[key][2][1])
w_temp.append(primary[key][1][0]*primary[key][1][1]+primary[key][0][0]*primary[key][0][1]+primary[key][2][0]*primary[key][2][1])
v.append(v_temp)
w.append(w_temp)
dp=[[0]*(n+1) for _ in range(m+1)]
for i in range(1,m+1):
for j in range(10,n+10,10):
max_i=dp[i-1][j]
for k in range(len(v[i])):
if j-v[i][k]>=0:
max_i=max(max_i,dp[i-1][j-v[i][k]]+w[i][k])
dp[i][j]=max_i
print(dp[m][n])
拼多多集团-PDD成长空间 1356人发布