题解 | #购物单#

购物单

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

N, m = map(int, input().split())
zhu = {}
fu = {}

for k in range(1, m + 1):
    v, p, q = map(int, input().split())
    if q == 0:
        zhu[k] = [v, v * p]
    else:
        if q in fu:
            fu[q].append([v, v * p])
        else:
            fu[q] = [[v, v * p]]

#print(">>>zhu=", zhu)
#print(">>>fu=", fu)

dp = [0 for j in range(N + 1)]

for k, t in zhu.items():
    w = []
    va = []

    w.append(t[0])
    va.append(t[1])

    if k in fu:
        # 主件 + 附件1
        w.append(w[0] + fu[k][0][0])
        va.append(va[0] + fu[k][0][1])

        if len(fu[k]) > 1:  # 表示有两个以上附件
            # 主件 + 附件2
            w.append(w[0] + fu[k][1][0])
            va.append(va[0] + fu[k][1][1])
            # 主件 + 附件1 + 附件2
            w.append(w[0] + fu[k][0][0] + fu[k][1][0])
            va.append(va[0] + fu[k][0][1] + fu[k][1][1])

    # print('>>>w=', w)
    # print('>>>va=', va)

    # 处理数据,注意此处for的缩进
    for j in range(N, -1, -10):
        for i, _ in enumerate(w):  # w代表价格

            if j >= w[i]:
                dp[j] = max(dp[j], dp[j - w[i]] + va[i])

# 输出
print(dp[N])

全部评论

相关推荐

找工作勤劳小蜜蜂:矛盾是没有实习,就是没实战经验,公司不想要,公司不要,你就没有实习,你就进入死循环,另外你的项目不是社会现在有大量岗位存在行业用的,云存储人员早就饱和。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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