题解 | #购物单#

购物单

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

N, m = input().split()
N, m = int(N), int(m)
goods = []

class Goods:
    def __init__(self):
        self.price = int
        self.value = int
        self.q = int
goods = []
for _ in range(0, m):
    goods.append(Goods())
#负载价值表
w = [[0]*4 for i in range(0,m)]
v = [[0]*4 for i in range(0,m)]

for i in range(0, m):
    a,b,c = input().split(" ")
    temp = goods[i]
    temp.price ,temp.value,temp.q = int(a), int(b), int(c)
    if int(c) == 0:
        w[i][0] = w[i][1] = w[i][2] = w[i][3] = temp.price
        v[i][0] = v[i][1] = v[i][2] = v[i][3] = temp.price * temp.value

#计算好附件的价值
for i in range(0, m):
    if goods[i].q !=0:
        #主件索引等于主件编号-1
        t = goods[i].q -1
        #判断已有附件个数
        #无附件
        if w[t][0] == w[t][1]:
            w[t][1] += goods[i].price
            v[t][1] += goods[i].price * goods[i].value
        #一个附件
        else:
            w[t][2] += goods[i].price
            v[t][2] += goods[i].price * goods[i].value

        w[t][3] += goods[i].price
        v[t][3] += goods[i].price * goods[i].value



# w = [[0*4]*m]
# v = [[0*4]*m]
#dp[i][j]  第i个主件 j预算
dp = [[0]*(N//10+1) for  i in range(0,m+1)]
#主件

for i in range(0,N+1,10):
    count = 0
    for j in  range(0, m):
        p = goods[j].q
        #是主件
        if p == 0:
            count +=1
            # 负载价值表索引为j
            # dp 表预算索引为 i//10
            

            dp[count][i//10]= dp[count-1][i//10]
            for k in  range(0,4):
                if i >= w[j][k]:
                    dp[count][i//10] = max(dp[count][i//10],dp[count-1][i//10-w[j][k]//10]+v[j][k])


print(dp[count][N//10])

全部评论

相关推荐

点赞 评论 收藏
分享
一个菜鸡罢了:哥们,感觉你的简历还是有点问题的,我提几点建议,看看能不能提供一点帮助 1. ”新余学院“别加粗,课程不清楚是否有必要写,感觉版面不如拿来写一下做过的事情,教育经历是你的弱势就尽量少写 2. “干部及社团经历”和“自我评价”删掉 3. 论文后面的“录用”和“小修”啥的都删掉,默认全录用,问了再说,反正小修毕业前肯定能发出来 4. 工作经验和研究成果没有体现你的个人贡献,着重包装一下个人贡献
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务