题解 | #购物单#
购物单
https://www.nowcoder.com/practice/f9c6f980eeec43ef85be20755ddbeaf4?tpId=37&tqId=21239&rp=1&ru=/exam/oj/ta&qru=/exam/oj/ta&sourceUrl=%2Fexam%2Foj%2Fta%3FtpId%3D37&difficulty=undefined&judgeStatus=undefined&tags=&title=
n, m = map(int, input().split()) # 容量为n,物品为m primary, annex = {}, {} # 创建空字典分别存放主、附件 for i in range(1, m + 1): v, p, q = map(int, input().split()) if q == 0: primary[i] = [v, p] else: if q not in annex: # 附件1 annex[q] = [[v, p]] #这里一定要双重[],如果是=[v,p],则添加附件2时会是[q1:[v1,p1,[v2,p2]]],我们想要的是[q1:[v1,p1],[v1,p1]] else: # 附件2 annex[q].append([v, p]) # 符合满意度的几种情况:1、主件,2、主件+附件1,3、主件+附件2,4,主件+附件1+附件2 m = len(primary) v, p = [[]], [[]] # 新建矩阵分别存放对应存放价格v及对应的满意度v*p,这里需要在索引为0的位置添加空列表 for key in primary: v_weight, p_value = [], [] # 1、主件 v_weight.append(primary[key][0]) p_value.append(primary[key][0] * primary[key][1]) if key in annex: # 2、主件+附件1 v_weight.append(primary[key][0] + annex[key][0][0]) p_value.append(primary[key][0] * primary[key][1] + annex[key][0][0] * annex[key][0][1]) if len(annex[key]) > 1: # 存在附件2 # 3、主件+附件2 v_weight.append(primary[key][0] + annex[key][1][0]) p_value.append(primary[key][0] * primary[key][1] + annex[key][1][0] * annex[key][1][1]) # 4、主件+附件1+附件2 v_weight.append(primary[key][0] + annex[key][0][0] + annex[key][1][0]) p_value.append(primary[key][0] * primary[key][1] + annex[key][0][0] * annex[key][0][1] + annex[key][1][0] * annex[key][1][1]) v.append(v_weight) p.append(p_value) dp = [[0] * (n + 1) for _ in range(m + 1)] for i in range(1, m + 1): for j in range(10, n + 1, 10): max_i = dp[i - 1][j] for k in range(len(v[i])): if j >= v[i][k]: max_i = max(max_i, dp[i - 1][j - v[i][k]] + p[i][k]) dp[i][j] = max_i # for k in range(len(v[i])): # if j >= v[i][k]: # dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - v[i][k]] + p[i][k]) print(dp[m][n])
代码如上,请问各位大佬,我最后注释的那边一部分筛选条件错在哪里了呀,为什么会不对呢
2000 10
500 1 0
400 4 0
300 5 1
400 5 1
200 5 0
500 4 5
400 4 0
320 2 0
410 3 0
400 3 5
这组数据正确结果应该是7430,注释内的代码筛选出来的是7400,不理解为什么选不出来