华为机考入门python3--(16)牛客16-购物单最大满意度

news2024/12/23 11:55:48

分类:动态规划,组合,最大值,装箱问题

知识点:

  1. 生成递减数  100, 90, 80, ..., 0   range(100, -1, -10)

  2. 访问列表的下标key    for key, value in enumerate(my_list):

  3. 动态规划-捆绑装箱问题

 a. 把有捆绑约束的物体进行组合,形成唯一的个体

b. 确定动态规划表的含义,即dp[i]表示什么

c. 判断一个个体能否放入    if j - w[k] >= 0:

d.如果能放入,判断dp[i]是否需要更新    dp[j] = max(dp[j], dp[j - w[k]] + v[k])

题目来自【牛客】

图片

买附件则一定要买对应的主件

# N 表示总钱数, m 为可购买的物品的个数
N, m = map(int, input().split())
main_parts, accessories = {}, {}
for i in range(1, m + 1):
    # v 表示该物品的价格, p 表示该物品的重要度, 
    # q 表示该物品是主件还是附件。如果 q=0 ,表示该物品为主件,如果 q>0 ,表示该物品为附件, q 是所属主件的编号
    v, p, q = map(int, input().split())
    # 主件
    if q == 0:
        # 存储 [价值,价格*重要度]
        main_parts[i] = [v, v*p]
    # 附件
    else:
        # 存储 [价值,价格*重要度]
        if q in accessories:
            accessories[q].append([v, v*p])
        else:
            accessories[q] = [[v, v*p]]


# {1: [800, 1600], 4: [400, 1200], 5: [500, 1000]}
# print(main_parts)
# {1: [[400, 2000], [300, 1500]]}
# print(accessories)

# 初始化动态规划表,dp[j]表示预算在j内的最大满意度
dp = [0] * (N + 1)

# 遍历主件
for key, value in main_parts.items():
    # w表示,一个主件和其附件的各种可能组合的总价格,
    # 如[800, 1200, 1100, 1500], 800表示主件,
    # 1200表示主件+附件1,1100表示主件+附件2,1500表示主件+附件1+附件2
    # v表示对应组合的满意度
    w, v = [], []
    # 1、主件的价格
    w.append(value[0])  
    v.append(value[1])  # 主件的满意度
    if key in accessories:  # 存在附件
        # 2、主件+附件1
        w.append(w[0] + accessories[key][0][0])  
        v.append(v[0] + accessories[key][0][1])
        if len(accessories[key]) > 1:  # 附件个数为2
            # 3、主件+附件2
            w.append(w[0] + accessories[key][1][0])  
            v.append(v[0] + accessories[key][1][1])
            # 4、主件+附件1+附件2
            w.append(w[0] + accessories[key][0][0] + accessories[key][1][0])  
            v.append(v[0] + accessories[key][0][1] + accessories[key][1][1])
    
    # print(w)
    # print(v)
    
    # 每加入一个组合,都重新遍历一遍,检查是否可以实现最大满意度
    # j表示预算,从N开始递减10,直至小于-1,即1000, 980, ..., 0
    for j in range(N, -1, -10):  # 物品的价格是10的整数倍
        # 使用 enumerate 遍历列表,并打印出索引和对应的元素
        for k, _ in enumerate(w):
            # 是否能将该组合_放入
            # 包含该组合(主件+附件)的价格之后,还有余额,就选中该组合
            if j - w[k] >= 0:
                # dp[j]表示当前预算为j的最大满意度
                # dp[j - w[k]] + v[k]表示把v包含进来
                # j - w[k]表示剩余的预算
                # dp[j - w[k]]表示剩余的预算可以实现的最大满意度
                dp[j] = max(dp[j], dp[j - w[k]] + v[k])

print(dp[N])

参考:https://coco56.blog.csdn.net/article/details/124463397

by 软件工程小施同学

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1613498.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringMvc的核心组件和执行流程

一、 springmvc的核心组件及作用 1.DispatcherServlet:前置控制器,是整个流程控制的核心,用来控制其他组件的执行,降低了其他组件的耦合性 2.Handler:控制器,完成具体的业务逻辑,当DispatcherServlet接收到请求后&am…

力扣70:爬楼梯(经典动态规划)

题目 解题思路 考虑动态规划&#xff0c;dp[i]表示爬到第i层的方法种数&#xff0c;对于第i层&#xff0c;可以从第i-2层爬两个台阶到达&#xff0c;也可以从i-1层爬一个台阶到达&#xff0c;故dp[i]dp[i-1]dp[i-2]&#xff0c;输出dp[n]即为答案 代码 #include<iostream…

CSS——高级选择器

层次的选择器&#xff1a; <1> 后代选择器&#xff1a; 格式&#xff1a; 标签1 标签2{} 解释&#xff1a; 标签1 不生效&#xff0c;被标签1 嵌套中的 标签2才生效 举例&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charse…

利用fft算法理解频率和像素变化率的关系

算法我就不贴了。算法就是算法导论的内容。 我直接写推导过程。 假设变化率为f(n1)-f(n) 首先计算二进制数&#xff0c;这里我假设为3位二进制。 例如:f(5)-f(4)&#xff0c; 5和4的二进制为101,100。所以逆序数为101&#xff0c;001 101对应的频率为5, 001对应的频率为1…

go | defer、panic、recover

刷一道题&#xff0c; 将当函数触发panic 之后&#xff0c;函数是怎么执行的 然后我去找相关博客&#xff0c;发现这篇讲的蛮好的 接下来我直接上demo &#xff0c;然后通过demo 来逐个分析 package mainimport ("fmt" )func f() {defer func() {if r : recover();…

【 AIGC 研究最新方向(上)】面向平面、视觉、时尚设计的高可用 AIGC 研究方向总结

目前面向平面、视觉、时尚等设计领域的高可用 AIGC 方向有以下 4 种&#xff1a; 透明图层生成可控生成图像定制化SVG 生成 本篇&#xff08;上篇&#xff09;介绍 1、2&#xff0c;而下篇将介绍 3、4。 透明图层生成 LayerDiffuse 代表性论文&#xff1a;Transparent Imag…

23种设计模式之抽象工厂

简单工厂和工厂方法 关注 产品等级 抽象工厂 关注 产品族 对于比较稳定的产品&#xff0c;抽象工厂更有效率&#xff08;一个工厂生产很多产品族&#xff09; 抽象工厂代码例子加深理解

数组的删除与插入优化思路

数据结构&#xff1a;线性表、非线性表 线性表&#xff1a; 数组&#xff0c;链表、队列、栈等。 线性表就是数据排成像一条线一样的结构&#xff0c;每个线性表上的数据最多只有前和后两个方向。 非线性表&#xff1a; 二叉树、堆、图等。 在非线性表中&#xff0c;数据之间并…

09 JavaScript学习:对象

对象的概念 在计算机科学中&#xff0c;对象是一种数据结构&#xff0c;用于存储数据和方法&#xff08;也称为函数&#xff09;。对象可以包含属性&#xff08;也称为成员变量&#xff09;和方法&#xff08;也称为成员函数&#xff09;&#xff0c;通过这些属性和方法可以描述…

SpringMVC--RESTful

1. RESTful 1.1. RESTful简介 REST&#xff1a;Representational State Transfer&#xff0c;表现层资源状态转移。 RESTful是一种网络架构风格&#xff0c;它定义了如何通过网络进行数据的交互。这种风格基于HTTP协议&#xff0c;使得网络应用之间的通信变得更加简洁和高效。…

每天五分钟机器学习:神经网络模型参数的选择

本文重点 在深度学习和人工智能的浪潮中,神经网络作为其中的核心力量,发挥着举足轻重的作用。然而,神经网络的性能并非一蹴而就,而是需要经过精心的参数选择和调优。 神经网络由大量的神经元组成,每个神经元之间通过权重进行连接。这些权重,以及神经元的偏置、激活函数…

CSS基础:position定位的5个类型详解!

你好&#xff0c;我是云桃桃。 一个希望帮助更多朋友快速入门 WEB 前端的程序媛。 云桃桃-大专生&#xff0c;一枚程序媛&#xff0c;感谢关注。回复 “前端基础题”&#xff0c;可免费获得前端基础 100 题汇总&#xff0c;回复 “前端工具”&#xff0c;可获取 Web 开发工具合…

《R语言与农业数据统计分析及建模》学习——数据框的统计处理

1、数据框的透视 aggregate()函数用于对数据框进行聚合操作&#xff0c;可以按照指定的条件对数据进行分组&#xff0c;并计算每组的汇总统计量。函数如下&#xff1a; aggregate(formula,data,FUN,...) formula&#xff1a;定义聚合的公式&#xff0c;指定需要聚合的变量和分…

【精】Devops实战学习CI/CD落地方案#CI篇#

目录 先有个大概了解 基本概念 CI/CD Devops 阿里云效 devops产品 K8s jenkins docker git maven 知行合一&#xff0c;上手操作 实操记录 安装VMware 安装并配置虚拟机 安装并配置docker docker安装 修改镜像源&#xff08;关键且易出错&#xff09; CentOS…

随机森林计算指标重要性—从决策树到随机森林Python实现

文章目录 前言一、节点二、决策树2.1 案例分析——优良的水稻2.2 案例分析——家庭财富水平 三、随机森林三、Python代码实现3.1 关键问题3.1.1 节点的表示3.1.2 决策树的表示** 根节点划分左右子树的依据 **3.1.3 随机森林的构造与重要性的表示 3.2 节点类3.2 决策树类3.2.1 初…

Linux下:gcc/g++调试工具gdb

gdb 程序的发布方式有两种&#xff0c;debug模式和release模式 Linux gcc/g出来的二进制程序&#xff0c;默认是release模式 gdb mybin debug和release debug debug模式下生成的可执行程序会添加调试信息&#xff0c;所以生成的可执行程序会较大 在使用gcc/g进行编译的时…

工欲善其事必先利其器(在windows使用clion编程,远程连接linux服务器)

工欲善其事必先利其器&#xff08;在windows使用clion编程&#xff0c;远程连接linux服务器&#xff09; 前提条件 需要在windows上安装clion&#xff0c;在linux上安装cmake(编译项目用)和gdp(debug用) cmake安装 我这里使用的是3.24.2版本的cmake。 首先当然是下载cmake…

物联网(iot)深度解析——FMEA软件

物联网即IoT&#xff0c;是指通过各种信息传感器、射频识别技术、全球定位系统、红外感应器、激光扫描器等各种装置与技术&#xff0c;实时采集任何需要监控、连接、互动的物体或过程&#xff0c;采集其声、光、热、电、力学、化学、生物、位置等各种需要的信息&#xff0c;通过…

BMR:基于Boostrapping多视图的虚假新闻检测

一、概述 文章提出了三种视图信息来表示一篇新闻&#xff1a;文本、图像结构、图像语义。然后设计了改进的多门混合专家系统&#xff08;iMMoE&#xff09;来进行信息融合。保留单模态信息来保证特征对新闻的保真性&#xff0c;增加的多模态信息能保证不同模态的一致性&#xf…

12.Hexo helpers类似函数和data folder数据文件夹

helper Hexo里的helper&#xff0c;或者说是函数 基本上就是小函数&#xff0c;可以在layout布局中使用&#xff0c;可以允许做一些事情 如字符串操作、检查true或false、检查是否在一个页面上、打印出某个页面中的日期或时间特定格式 打开index.ejs trim 可以通过 <%…