题解 | #购物单#
购物单
https://www.nowcoder.com/practice/f9c6f980eeec43ef85be20755ddbeaf4
import sys
#a = [[4, 2, 0, 0, 0, 0], [3, 2, 1, 1, 0, 0], [5, 2, 1, 2, 0, 0], [6, 2, 0, 3, 0, 0], [7, 2, 4, 4, 0, 0]]
#a=[[价格,重要度,主件编号,序号,主件附件标记,附件数量]]
p, m = map(int, input().split())
p = p // 10
a = sys.stdin.readlines()
for i, x in zip(range(m), a):
a[i].rstrip()
a[i] = list(map(int, x.split())) + [i, 0, 0]
a[i][0] //= 10
for i, x in zip(range(m), a):
if x[2] != 0:
x[3] = a[x[2]-1][3]
x[4] = 0
a[x[2]-1][5] += 1
else:
x[4] = 1
a.sort(key=lambda x:(x[3], x[4]))
dp = [[0 for _ in range(p+1)] for _ in range(m+1)]
#1 <= i <= m
#1 <= j <= p
for i in range(1, m+1):
for j in range(1, p+1):
v_current = a[i-1][0]
p_current = a[i-1][1]
l_current = a[i-1][5]
flag = a[i-1][4]
if flag == 0:
if j >= v_current:
dp[i][j] = max(dp[i-1][j], dp[i-1][j-v_current] + p_current*v_current)
else:
dp[i][j] = dp[i-1][j]
else:
if j >= v_current:
dp[i][j] = max(dp[i-l_current-1][j], dp[i-1][j-v_current] + p_current*v_current)
else:
dp[i][j] = dp[i-l_current-1][j]
print(dp[m][p]*10)
查看6道真题和解析

