题解 | #购物单#

购物单

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

N, m = map (int, input().split())
main, aux = {}, {}
N = int(N/ 10)
for i in range(1, m + 1):
    v, p, q = map(int, input().split())
    v = int(v/10)
    if q == 0:
        main[(i, 0)] = (v, p*v)
    else:
        if (q, 0) not in aux:
            aux[(q, 0)] = (v, p*v)
        else:
            aux[(q, 1)] = (v, p*v)
for i in range(1, m + 1):
    if (i, 0) in aux:
        if (i, 0) in aux:
            if (i, 1) in aux:
                main[(i, 1)] = (main[(i, 0)][0] + aux[(i, 0)][0], main[(i, 0)][1] + aux[(i, 0)][1])
                main[(i, 2)] = (main[(i, 0)][0] + aux[(i, 1)][0], main[(i, 0)][1] + aux[(i, 1)][1])
                main[(i, 3)] = (main[(i, 0)][0] + aux[(i, 0)][0] + aux[(i, 1)][0], main[(i, 0)][1] + aux[(i, 0)][1] + aux[(i, 1)][1])
            else:
                main[(i, 1)] = (main[(i, 0)][0] + aux[(i, 0)][0], main[(i, 0)][1] + aux[(i, 0)][1])
dp = [[0] * (N + 1) for _ in range(m+2)]
for i in range(1, m + 1):
    dp[i][0] = 0
    for j in range(1, N + 1):
        if (i,3) in main:
            temp = 0
            dpmax = 0
            for k in range(4):
                if j >= main[(i, k)][0]:
                    temp = max(dp[i-1][j], dp[i-1][j-main[(i, k)][0]] + main[(i, k)][1])
                else:
                    temp = dp[i-1][j]
                dpmax = max(dpmax, temp)
            dp[i][j] = dpmax
        elif (i,1) in main:
            temp = 0
            dpmax = 0
            for k in range(2):
                if j >= main[(i, k)][0]:
                    temp = max(dp[i-1][j], dp[i-1][j-main[(i, k)][0]] + main[(i, k)][1])
                else:
                    temp = dp[i-1][j]
                dpmax = max(dpmax, temp)
            dp[i][j] = dpmax
        elif (i,0) in main:
            if j >= main[(i, 0)][0]:
                dp[i][j] = max(dp[i-1][j], dp[i-1][j-main[(i, 0)][0]] + main[(i, 0)][1])
            else:
                dp[i][j] = dp[i-1][j]
        else:
            dp[i][j] = dp[i-1][j]
        # print(i,j, dp[i][j])
print(dp[m][N] * 10)

全部评论

相关推荐

不愿透露姓名的神秘牛友
2024-12-30 18:02
程序员牛肉:1.可以标记一下自己的学校是985,有一些hr可能没想到你这个院校是985的。 2.简历所呈现出来的能力还是有点差的,苍穹外卖+黑马点评。这在java技术域里面也就是刚学三四个月的样子,大厂现在招人少,小厂又更加希望你能直接过来干活。就你简历上呈现出来的能力,确实是有点难找,肉眼可见的不懂技术。 第一个项目中:简单的使用redis也算是亮点嘛?使用jwt,threadlocal也算是亮点?你不就是调了几个包嘛?Nginx作为服务器也能写出来,这不是前端的活嘛? 第二个项目中:分布式锁+mq消息队列+Lua队列。真没啥好问的。属于面试官看一眼就阳痿的简历,没有任何想提问的欲望。 我给你建议是好好的挖一挖这个项目吧,其实苍穹外卖和黑马点评这两个项目很不错了,只不过是太烂大街了导致面试官没啥问的兴趣,所以不太推荐写简历上。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务