题解 | #购物单#

购物单

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...:公司可能有弄嵌入式需要会画pcb的需求,而且pcb能快速直观看出一个人某方面的实力。看看是否有面试资格。问你问题也能ai出来,pcb这东西能作假概率不高
点赞 评论 收藏
分享
06-13 10:15
门头沟学院 Java
想去夏威夷的大西瓜在...:我也是27届,但是我现在研一下了啥项目都没有呀咋办,哎,简历不知道咋写
点赞 评论 收藏
分享
07-07 14:30
复旦大学 Java
遇到这种人我也不知道说啥了
无能的丈夫:但我觉得这个hr语气没什么问题啊(没有恶意
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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