首页 > 其他分享 >HW_购物车问题

HW_购物车问题

时间:2022-12-09 23:35:33浏览次数:39  
标签:current 主件 max HW 购物车 问题 附件 dp fujian


# 只管主件
v, n = map(int,input().split())

# 每到一个主件,都有四种情况,主件, 主件 + 附件1, 主件 + 附件2, 主件 + 附件1 + 附件2 

primary = {} # 格式 key是物品编号,value是 价格 和 满意度  { 1: (800, 2) , 4:(400,3), 4:(500,2) } 
fujian = {}  # 格式 key 是主件物品编号, value是物品的价格和满意度 {1:[(400,5),(400,5)]}



m_all = [] # 保存当前主件 4种 选择的价格 .不一定有4种。依次是主件的价格、主件+附件1的价格、主件+附件2的价格、主件+附件1+附件2的价格 
w_all = [] # 保存当前主件 4种 的满意度。 不一定有4种。


# 构建primary 和 fujian 
for item in range(1,n + 1):
    m, w, q = map(int, input().split())
    if q == 0:
        # 主件
        primary[item] = (m,w)
    else:
        # 附件
        if q in fujian.keys():
            # 第二个附件
            fujian[q].append((m,w))
        else:
            # 第一个附件
            fujian[q] = [(m,w)]

# print("primary:", primary)
# print("fujian:", fujian)
#  构建 m 和 w 

for p in primary.keys():
    # 遍历主件 ,主件价格 追加
    m = [primary[p][0]]
    w = [primary[p][1] * m[0]]

    # 遍历当前主件的附件 
    if p in fujian.keys():
        # 主件 + 附件1  的 价格 追加 
        m.append(m[0] + fujian[p][0][0] )
        # 主件 + 附件1  的满意度 追加
        w.append(w[0] + fujian[p][0][1] * fujian[p][0][0])
        if len(fujian[p]) > 1:
            # 有附件2 

            # 主件 + 附件2 的价格 追加 
            m.append(m[0] + fujian[p][1][0])
            # 主件 + 附件2 的满意度 追加
            w.append(w[0] + fujian[p][1][1] * fujian[p][1][0])

            # 主件 + 附件1 + 附件2  的价格追加
            m.append(m[1] + fujian[p][1][0])
            # 主件 + 附件1 + 附件2  的满意度追加
            w.append(w[1] + fujian[p][1][1] * fujian[p][1][0])
    m_all.append(m)
    w_all.append(w) 

# print("m_all:", m_all)
# print("w_all:", w_all)
# 构建dp 

# dp = [[0 for i in range(v+1)] for j in range(n+1)]
dp = [[0]*(v+1) for _ in range(len(m_all)+1)]
# print("len_dp:", len(dp))
# print("len_v:", len(dp[0]))
# print("dp:", dp) 

# for i in range(1, len(m_all) + 1):
#     for j in range(10, v+1, 10):
#         max_w_ij = dp[i-1][j] # 起始最大值就是不要当前的物品的满意度
#         for current_m, current_w in zip(m_all[i-1], w_all[i-1]):
#             # 遍历当前的四种情况,可能只有一种。
#             if j - current_m >= 0:
#                 # 当前价格大于当前要买的东西 价格才 开始 比较 
#                 # print("current_i:", i, current_m, current_w )
#                 max_w_ij = max(max_w_ij, dp[i-1][j - current_m] + current_w)
        
#         dp[i][j] = max_w_ij 
dp = [0] * (v + 1)  # 滚动数组 ,计算当前行只和上一行有关系

for i in range(1, len(m_all) + 1):
    dp_pre = dp 
    dp = [0] * (v + 1) 
    for j in range(10, v+1, 10):
        max_w_ij = dp_pre[j] 
        for current_m, current_w in zip(m_all[i-1], w_all[i-1]):
            # 遍历当前的四种情况,可能只有一种。
            if j - current_m >= 0:
                # 当前价格大于当前要买的东西 价格才 开始 比较 
                # print("current_i:", i, current_m, current_w )
                max_w_ij = max(max_w_ij, dp_pre[j - current_m] + current_w)
        
        dp[j] = max_w_ij

考试最好不要用ijk,用其他带名称的变量先赋值。不然很容易在细节算错。

关于动态规划。
就是填表
从上到下,从左到右。到每一个点,有可能有多个选择,多个选择就先构造多个选择,然后遍历。

如果不好构建表,就暴力 贪婪 。

标签:current,主件,max,HW,购物车,问题,附件,dp,fujian
From: https://www.cnblogs.com/clllll/p/16970529.html

相关文章

  • #yyds干货盘点#按钮点击重复提交问题解决
    提交按钮重复点击这是最常见的问题,重复提交会造成多条数据入库。点击提交给个loading提示过渡,期间按钮不可再次触发就可以。​查询按钮重复点击如果查询按钮点一下就设置loa......
  • 数组分成两个最接近集合问题
    数组分成两个最接近集合问题作者:Grey原文地址:博客园:数组分成两个最接近集合问题CSDN:数组分成两个最接近集合问题问题描述给定一个正数数组arr,请把arr中所有的数......
  • 解决PortPlayer打开视频时卡顿问题
    最近发现Potplayer打开视频的时候会卡顿一下,虽然不影响啥功能,但感觉有点不舒服。我的cpu是去年换的intel12代的cpu,各方面都非常流畅,并且以前都没有这个现象,怀疑是最近换了......
  • 递归之猴子吃桃、啤酒问题
    packagecom.itheima.d3_recursion;publicclassRecursionTest4{publicstaticvoidmain(String[]args){//目标:认识递归:做猴子吃桃问题。/......
  • 关于base64图片存入masql数据库问题
    //插入数据库前把base64图片代码转成String格式mysql数据库类型为longText大文件格式$data['thumbnail']=(string)$data['thumbnail'];$res=$this->model->save($dat......
  • echarts-1.不渲染的问题
    1问题1.1今日开发中遇到同时设置两个echarts,切换的时候其中一个不渲染,一个渲染成功一个渲染失败。2排查原因2.1先是排查echarts是否选中,确认已选中。2.2然后排查e......
  • 电脑屏幕录制没声音怎么办?可能是这几个方面的问题
    小伙伴们在电脑录制屏幕时总是会遇到突然没声音的情况,遇到这种情况怎么办呢?不用慌张,小编教你怎么做~Windows系统录制屏幕,无声音时1.录屏没有声音/麦克风声音关闭录屏没有声音......
  • https页面内http链接跳转时的referer问题
    no-referrer:即不添加referer信息;origin:即referer信息只有schema://domain:port,即协议://域名:端口,没有路径信息;no-referrer-when-downgrade:当协议降级时,不发送referer......
  • vue2 购物车21
    main:importVuefrom'vue'importAppfrom'./App.vue'//vantimportVantfrom'vant';import'vant/lib/index.css';import{NavBar,SubmitBar,Card,Checkb......
  • synchronized的锁对象改变问题(转)
    原文:https://www.jianshu.com/p/f6b3cc21f5d7作者:跨界师 大家都知道synchronized是一个对象锁,所以当对象变化时,锁就会消失,就会没有同步效果。请看下面的问题:package......