题解 | #购物单#

购物单

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

money, nums = list(map(int, input().split()))

w = {}  # 存储重量,即花的钱
v = {} # 存储价值,即满意度

zhu = {}  # 存储主件信息
fu ={} # 存储附件信息

for i in range(1, nums + 1):  # 读取输出
    a, b, c = list(map(int, input().split())) # 价格 权重 是否主件
    if c == 0:
        zhu[i] = [a, b] # 主件是二维的
    else:
        if c not in fu:  # 该主件未存储相关的附件
            fu[c] = [[a, b]]
        else:
            fu[c].append([a, b]) # 附件是三维的 ,拼接附件

# print(zhu,fu)

for k in zhu:  # 以遍历主件作为外层循环
    w[k] = [zhu[k][0]]  # 只买主件的情况,花的钱
    v[k] = [zhu[k][0]*zhu[k][1]] # 满意度
    
    # 买一件的情况
    if k in fu:   # 如果主件存在附件
        w[k].append(zhu[k][0] + fu[k][0][0]) # 花多少钱是二维的,主件加第一个附件的钱
        v[k].append(v[k][0] + fu[k][0][0]*fu[k][0][1]) # 满意度是二维的,件加第一个附件的满意度

        if len(fu[k]) > 1: # 如果主件存在两个附件
            w[k].append(zhu[k][0] + fu[k][0][0] + fu[k][1][0]) # 三件花的钱
            v[k].append(v[k][1] + fu[k][1][0]*fu[k][1][1]) #三件的满意度
            #只买第二个附件
            w[k].append(zhu[k][0] + fu[k][1][0])
            v[k].append(v[k][0] + fu[k][1][0]*fu[k][1][1])
    # print(fu,zhu)
    # print(w,v)

dp = [0]*(money+1)


for i in zhu:
    for m in range(money, -1, -10):  #从后往前遍历钱,前面的数据就相当于上一次遍历的数据
        max_manyi = dp[m]
        for j in range(len(w[i])):
            if m - w[i][j] >= 0:
                max_manyi = max(max_manyi, dp[m - w[i][j]] + v[i][j])
        dp[m] = max_manyi
    # print(dp)

print(dp[money])





全部评论

相关推荐

感觉他们一点都不了解现在这个社会就业有多难,已经在牛客刷到好多篇 延毕的帖子了,延毕就会导致已经找好的工作就没了,还得重新再找,学校和老师们是怎么想的呢????看到学生丢失工作会开心吗 就业数据都在造假,真实的就业困难不去解决 一个个真是好样的
从明天开始狠狠卷JV...:学生看到的是导师不放实习导致offer黄了。 导师看到的是招进来的学生吃自己补助和自己的招生名额,却没给自己升迁带来任何帮助,还要跑路。 根本利益的不一致,最主要留校的导师大概率是职场上招聘失败的,被迫留校的,什么牛鬼蛇神都会有
点赞 评论 收藏
分享
看到这个内容真是闹麻了。。。。。。现在有了AI以后很多人面试都会作弊吗? 那对老老实实面试的人岂不是不公平....
重生之我要干前端:放宽心,作弊很明显的,面试官也不是傻子,而且这世上更多的肯定是依靠自己的知识的人,所以放宽心提升自己最重要
点赞 评论 收藏
分享
见见123:简历没有啥问题,是这个社会有问题。因为你刚毕业,没有工作经历,现在企业都不要没有工作经历的。社会病了。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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