题解 | #购物单#

购物单

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

bag_content, num = map(int, input().split())

ths = {}
add_ths = {}

for i in range(1, num+1):
    v, p, q = map(int, input().split())
    if q == 0: # 主件
        ths[i] = [v, p]
    else:
        if q in add_ths.keys():
            add_ths[q].append([v, p])
        else:
            add_ths[q] = [[v, p]]
# print(ths, add_ths)
ths_num = len(ths)

w, v = [[]], [[]]
for key in ths:
    w_temp, v_temp = [], []
    w_temp.append(ths[key][0])
    v_temp.append(ths[key][0]*ths[key][1])
    if key in add_ths.keys():
        w_temp.append(w_temp[0]+add_ths[key][0][0])
        v_temp.append(v_temp[0]+add_ths[key][0][0]*add_ths[key][0][1])
        if len(add_ths[key]) > 1:
            w_temp.append(w_temp[0]+add_ths[key][1][0])
            v_temp.append(v_temp[0]+add_ths[key][1][0]*add_ths[key][1][1])
            w_temp.append(w_temp[0]+add_ths[key][0][0]+add_ths[key][1][0])
            v_temp.append(v_temp[0]+add_ths[key][0][0]*add_ths[key][0][1]+add_ths[key][1][0]*add_ths[key][1][1])

    w.append(w_temp)
    v.append(v_temp)
# print(w,v)

dp = [[0]*(ths_num+1) for _ in range(0, bag_content//10 + 1)]
for weight in range(1, bag_content//10 + 1):
    for t_num in range(1, ths_num+1):
        max_i = dp[weight][t_num-1]
        for n in range(len(w[t_num])):
            if weight - w[t_num][n]//10 >= 0:
                max_i = max(max_i, dp[weight - w[t_num][n]//10][t_num-1] + v[t_num][n])
        dp[weight][t_num] = max_i
# print(dp)
print(dp[bag_content//10][ths_num])

全部评论

相关推荐

炫哥_:为什么都读硕士了?项目还是网上的项目(真心发问)
最后再改一次简历
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务