题解 | #购物单#

购物单

https://www.nowcoder.com/practice/f9c6f980eeec43ef85be20755ddbeaf4

weight = {}
value = {}
tmp = {} # 存储附件

N, m = list(map(int, input().split())) # 总钱数 商品个数

for i in range(1, m+1):
    v, p, q = list(map(int, input().split())) # 价格 重要度 是否主件
    if q == 0:
        value[i] = [v*p]
        weight[i] = [v/10]
    else:
        if q not in tmp:
            tmp[q] = [(v, p)]
        else:
            tmp[q].append((v, p))

for k, val in tmp.items():
    for (v, p) in val:
        weight[k].append(v/10)
        value[k].append(v*p)

v, w = list(value.values()), list(weight.values()) # 满意度 价格
for i in range(len(w)):
    if len(w[i]) == 1:
        continue
    v[i].append(v[i][0] + v[i][-1])
    w[i].append(w[i][0] + w[i][-1])
    for j in range(1, len(w[i])-1):
        w[i][j] += w[i][j-1]
        v[i][j] += v[i][j-1]



count = len(v)
dp = [[0]*(N//10+1) for _ in range(count + 1)]
for i in range(1, count + 1):
    for money in range(1, N // 10 + 1):
        max_v = dp[i-1][money]
        for j in range(len(w[i-1])):
            if money - w[i-1][j] >= 0:
                max_v = max(max_v, dp[i-1][int(money-w[i-1][j])] + v[i-1][j])
        dp[i][money] = max_v    

print(dp[-1][-1])            
                









全部评论

相关推荐

专心打鱼:互联网搬运工,贴子都要偷
点赞 评论 收藏
分享
冲芭芭拉鸭:你这图还挺新,偷了。
投递美团等公司10个岗位
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务