题解 | #购物单#

购物单

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

n ,m =map(int,input().split()) #获取输入的两个数转化为int再赋值
primary,accessory ={},{}
for i in range(1,m+1) :
    x,y,z = map(int,input().split())
    if z==0:
        primary[i]=[x,y]#获取主件编号为i的物品对应的价格和重要度
    else: 
        if z in accessory : accessory[z].append([x,y])#获取附件对应的主键编号Z,并加入主件编号Z对应的附件表中,当然如果存在附件就在键对应值上新增,如果不存在则下一行代码中直接新增键值对
        else :  accessory[z]=[[x,y]]
price = [0]*(n+1) #定义一个价格对应满意集合,price[100]表示100元能够对应的最大满意度,考虑0开始股设置n+1个数
for key in primary.keys(): #此循环能起一个每一类商品只买一次的逻辑
    w ,v =[],[]
    w.append(primary[key][0]) #将此次主件表中产品价格新增到列表M中
    v.append(primary[key][0]*primary[key][1])#将此次主件表中产品满意度新增到列表v中
    if key in accessory:  #表示此主键表中存在附件则将相应的产品价格和满意度加入列表
        w.append(w[0]+accessory[key][0][0]) # m[1],v[1]表示 主件+第一个附件集合
        v.append(v[0]+accessory[key][0][0]*accessory[key][0][1])
        if len(accessory[key])>1:#存在第二个附件,m[2],v[2]表示 主件+第二个附件集合
            w.append(w[0]+accessory[key][1][0])
            v.append(v[0]+accessory[key][1][0]*accessory[key][1][1])
            w.append(w[1]+w[2]-w[0]) #m[3],v[3]表示 主件+二个附件集合
            v.append(v[1]+v[2]-v[0]) # (主件+第一附件) +(主件+第二附件)-主件 =主件+二个附件
    for j in range(n,9,-10) :#将总金额重大到小(考虑效率10为步长)开始遍历,保障查询相同满意度的时候价格取最低,并逐渐更新固定价格对应的满意度
        for k in range(len(w)):
            if j-w[k]>=0: #买了price[j]产品钱还够或还有剩余则往下走,否则跳出流程
                price[j]=max(price[j],price[j-w[k]]+v[k]) # 核心思想更新价格对应的满意度,此代码表示 step1:使用m[k]获取v[k]的满意度,step2:取读取剩余price[j-m[k]]元前对应的满意度 step3:将step1+step2相加 ,step4:获取价格j元step3计算的值和价格j元历史得到的值作比较,更新价格j元对应的满意度
print(price[n])

代码详细以贴出,记录调试过程中的错误记录

1.获取代码存在第二个附件的判断 ,if len(accessory[key])>1,之前写的是if len(accessory)>1,导致一直无法获取报错

2.for j in range(n,9,-10) 将总金额遍历,之前出差for j in range(n,9,10) 步长数值为10导致一运行数组越界

3.for ,if都判断语句中 语句体,需要按照对应"tab"键位置,此类出错概率很大

全部评论

相关推荐

最近和朋友聊天,她说了句让我震惊的话:"我发现我连周末点外卖都开始'最优解'了,一定要赶在高峰期前下单,不然就觉得自己亏了。"这不就是典型的"班味入侵"吗?工作思维已经渗透到生活的方方面面。
小型域名服务器:啊?我一直都这样啊?我还以为是我爱贪小便宜呢?每次去实验室都得接一杯免费的开水回去,出门都得规划一下最短路径,在宿舍就吃南边的食堂,在实验室就吃北边的食堂,快递只有顺路的时候才取。
点赞 评论 收藏
分享
一个菜鸡罢了:哥们,感觉你的简历还是有点问题的,我提几点建议,看看能不能提供一点帮助 1. ”新余学院“别加粗,课程不清楚是否有必要写,感觉版面不如拿来写一下做过的事情,教育经历是你的弱势就尽量少写 2. “干部及社团经历”和“自我评价”删掉 3. 论文后面的“录用”和“小修”啥的都删掉,默认全录用,问了再说,反正小修毕业前肯定能发出来 4. 工作经验和研究成果没有体现你的个人贡献,着重包装一下个人贡献
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务