题解 | #购物单#

购物单

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

# 2024年10月29日  周二   下午15:08


N, m = list(map(int, input().split()))
zhu = {}
fu = {}
for i in range(1, m + 1):
    v, p, q = list(map(int, input().split()))
    if q == 0:
        zhu[i] = [v, v * p]
    else:
        if q not in fu:
            fu[q] = [[v, v * p]]
        else:
            fu[q].append([v, v * p])
#print(zhu)
#print(fu)
dp = [0] * (N + 1)
for k, t in zhu.items():
    w = []
    va = []
    w.append(t[0])
    va.append(t[1])
    if k in fu:
        # for a,b in fu.items():  # 千万记住这里不能对附件列表进行完全循环访问,如果fu={1: [[300, 1500], [400, 2000]], 5: [[500, 2000], [400, 1200]]},就会出错
        w.append(t[0] + fu[k][0][0])
        va.append(t[1] + fu[k][0][1])
        if len(fu[k]) > 1:
            w.append(t[0] + fu[k][1][0])
            va.append(t[1] + fu[k][1][1])

            w.append(t[0] + fu[k][0][0] + fu[k][1][0])
            va.append(t[1] + fu[k][0][1] + fu[k][1][1])
    #print(w)
    #print(va)
    for j in range(N, -1, -10):  # 一定要注意这里for循环的缩进,还有外循环是对N进行循环(符合动态规划要求,外循环要倒着来,内循环正常)
        for c, d in enumerate(w):
            if j >= d:
                dp[j] = max(dp[j], dp[j - d] + va[c])
print(dp[N])

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-01 17:00
点赞 评论 收藏
分享
06-20 19:40
中原工学院 Java
网络存储:十几天不会让你拉人办卡就结束了吧?
点赞 评论 收藏
分享
05-12 17:00
门头沟学院 Java
king122:你的项目描述至少要分点呀,要实习的话,你的描述可以使用什么技术,实现了什么难点,达成了哪些数字指标,这个数字指标尽量是真实的,这样面试应该会多很多,就这样自己包装一下,包装不好可以找我,我有几个大厂最近做过的实习项目也可以包装一下
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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