题解 | #购物单#
购物单
https://www.nowcoder.com/practice/f9c6f980eeec43ef85be20755ddbeaf4
from ctypes import Array import sys while True: try: #总价格,商品数量 total, k = list(map(int, input().split())) #主商品 main_key = [] #权重满意度 perPrice = {} #商品价格 perValue = {} #主商品数据 mainPrice = [] mainValue = [] for i in range(1, k + 1): perPrice[i] = [0, 0, 0] perValue[i] = [0, 0, 0] for i in range(1, k + 1): v, p, q = list(map(int, input().split())) vp = int(v*p/10) if q == 0: perPrice[i][0] = vp perValue[i][0] = int(v / 10) main_key.append(i) else: if perPrice[q][1] == 0: perPrice[q][1] = vp perValue[q][1] = int(v / 10) else: perPrice[q][2] = vp perValue[q][2] = int(v / 10) # for key in main_key: for key in perPrice.keys(): if key in main_key: mainPrice.append(perPrice[key]) mainValue.append(perValue[key]) mm = len(mainPrice) nn = int(total / 10) dp = [[0] * (nn + 1) for _ in range(mm + 1)] for i in range(1, mm + 1): p1, p2, p3 = ( mainPrice[i - 1][0], mainPrice[i - 1][1], mainPrice[i - 1][2], ) v1, v2, v3 = ( mainValue[i - 1][0], mainValue[i - 1][1], mainValue[i - 1][2], ) for j in range(nn + 1): dp[i][j] = dp[i - 1][j] if j - v1 >= 0: dp[i][j] = max(dp[i][j], p1 + dp[i - 1][j - v1]) if j - v1 - v2 >= 0: dp[i][j] = max(dp[i][j], p1 + p2 + dp[i - 1][j - v1 - v2]) if j - v1 - v3 >= 0: dp[i][j] = max(dp[i][j], p1 + p3 + dp[i - 1][j - v1 - v3]) if j - v1 - v2 - v3 >= 0: dp[i][j] = max( dp[i][j], p1 + p2 + p3 + dp[i - 1][j - v1 - v2 - v3] ) xx = dp[mm][nn] print(dp[mm][nn]*10) except: break