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

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

知识点:

  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、主件+附件1w.append(w[0] + accessories[key][0][0])  v.append(v[0] + accessories[key][0][1])if len(accessories[key]) > 1:  # 附件个数为2# 3、主件+附件2w.append(w[0] + accessories[key][1][0])  v.append(v[0] + accessories[key][1][1])# 4、主件+附件1+附件2w.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, ..., 0for 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.mzph.cn/diannao/1526.shtml

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

相关文章

AI大模型日报#0421:「个性化」图像Gen4Gen框架、吴恩达亲授智能体设计模式、国内14大LLM最新评测报告

导读: 欢迎阅读《AI大模型日报》,内容基于Python爬虫和LLM自动生成。目前采用“文心一言”生成了每条资讯的摘要。 标题: 小冰徐元春:AIGC已经让普通人开始赚钱 | 中国AIGC产业峰会 摘要: 要点提炼: 在中国AIGC产业峰会上&…

Llama 3大模型发布!快速体验推理及微调

Meta,一家全球知名的科技和社交媒体巨头,在其官方网站上正式宣布了一款开源的大型预训练语言模型——Llama-3。 据了解,Llama-3模型提供了两种不同参数规模的版本,分别是80亿参数和700亿参数。这两种版本分别针对基础的预训练任务…

2024mac苹果电脑如何清理磁盘空间?用什么软件最好

苹果电脑已成为我们日常生活和工作不可或缺的一部分。随着时间的推移,不论是办公文档、个人照片还是各式各样的应用程序,都会逐渐积累,导致电脑的磁盘空间日益紧张。对于用户来说,苹果电脑如何清理磁盘空间,以保持设备…

【2024年最新】NodeMCU-ESP8266刷AT固件教程——适用于esp-12E和esp-12F

硬件图片 原理图 0、工具打包下载 工具包 密码:keduo 1、工具及固件下载 固件下载地址: 欢迎 | 安信可科技 (ai-thinker.com) 下载以下固件: 直接下载地址:AT 固件(固件号:0781) 下载以下工具&#xf…

使用Nexus搭建npm私服库

优质博文:IT-BLOG-CN 【1】下载nexus http://www.sonatype.com/download-oss-sonatype解压到本地即可; 【2】打开nexus-3.2.0-01-win64\nexus-3.2.0-01\bin;打开cmd(必须使用cmd) 执行nexus.exe /run;需要使…

Tomcat弱口令及war包漏洞复现(保姆级教程)

1.环境搭建 靶机:Ubuntu 安装参考:安装Ubuntu详细教程_乌班图安装教程-CSDN博客 vulhub docker搭建tomcat漏洞环境 参考:vulhub docker靶场搭建-CSDN博客 工具:burpsuite 2.漏洞复现 2.1弱口令爆破 进入http://192.168.143…

分类神经网络2:ResNet模型复现

目录 ResNet网络架构 ResNet部分实现代码 ResNet网络架构 论文原址:https://arxiv.org/pdf/1512.03385.pdf 残差神经网络(ResNet)是由微软研究院的何恺明、张祥雨、任少卿、孙剑等人提出的,通过引入残差学习解决了深度网络训练中的退化问题&#xff…

IO实现方式(同步阻塞、同步非阻塞、IO多路复用)

1. 同步阻塞IO 同步阻塞io在数据在数据拷贝到两个阶段都是阻塞的,即把socket的数据拷贝到内核缓冲区和把内核缓冲区的数据拷贝到用户态到应用程序缓冲区都是阻塞的。用户线程在这个期间不能处理其他任务。 优点:简单易用 缺点:为每一次io请…

VScode远程连接虚拟机提示: 无法建立连接:XHR failed.问题解决方案

一问题描述 在vscode下载插件Remote-SSH远程连接虚拟机时提示无法建立连接 二.最大嫌疑原因: 我也是在网上找了许久,发现就是网络原因,具体不知,明明访问别的网页没问题,就是连不上,然后发现下载vscode的…

【电赛】自制模块2——偏置变幅器

一、理论基础 模电学习笔记——集成运算放大器https://mp.csdn.net/mp_blog/creation/editor/134449862 运放单双电源转换/运放单双电源供电详解https://mp.csdn.net/mp_blog/creation/editor/135884117 通过改变R4或R5的阻值改变正弦波的振幅。 根据公式 A表示放大倍数。 …

MAC上如何将某个目录制作成iso格式磁盘文件,iso文件本质是什么?以及挂载到ParallelDesktop中?(hdiutil makehybrid )

背景 ParallelsDesktop没有安装ParallelsTools的无法共享目录,可以通过ParallelsDesktop提供CD磁盘的方式共享进去 命令 # 准备文档 mkdir mytestdir cp xxx mytestdir# 生成iso hdiutil makehybrid -o output.iso mytestdir -iso -joliethdiutil是MAC提供的磁盘…

Oracle中的视图

1- 什么是视图 视图是一个虚拟表 视图是由sql查询语句产生的 视图真实存在 但是不存储数据 视图中的数据 只是对 基表(源数据表) 中的数据的引用 总的来说 视图可以简化数据 用户,订单,物流 三个表进行关联 吧很复杂的sql查询语句存储成一个视图 …

Jmeter-非GUI模式下运行jmeter脚本-适用于服务器上持续集成测试

背景 大部分Jmeter脚本都是部署在Linux上运行,利用Jenkins做接口自动化,定时巡检任务。 执行命令 1.进入jmeter的目录,bin文件夹 cd C:\path\to\jmeter\bin2.运行脚本文件 jmeter -n -t D:\{脚本文件目录}\xxx.jmx -l D:\{脚本文件目录}…

信息系统项目管理师0061:架构设计(5信息系统工程—5.1软件工程—5.1.1架构设计)

第五章 信息系统工程 信息系统工程是用系统工程的原理、方法来指导信息系统建设与管理的一门工程技术学科,它是信息科学、管理科学、系统科学、计算机科学与通信技术相结合的综合性、交叉性、具有独特风格的应用学科。当前信息系统工程的主要任务是研究信息处理过程内在的规律…

Java中的BIO、NIO与AIO

1.概述 I/O 模型简单的理解:就是用什么样的通道进行数据的发送和接收,很大程度上决定了程序通信的性能。Java 共支持 3 种网络编程模型 I/O 模式:BIO、NIO、AIO。 2.Java BIO Java BIO(Blocking I/O):是传统的java io 编程&#…

密钥密码学(二)

原文:annas-archive.org/md5/b5abcf9a07e32fc6f42b907f001224a1 译者:飞龙 协议:CC BY-NC-SA 4.0 第十章:可变长度分数化 本章涵盖 基于摩尔斯电码的密码 混合字母和双字母 可变长度二进制码字 基于文本压缩的密码 本章涵盖…

【嵌入式】keil5安装(同时兼容C51和STM32)

最近在开发STM32的时候,安装Keil5,遇到STM32和C51的共存的问题,在网上找了很多方法,又遇到一些bug,最终还是弄好了。因此将处理的过程记录下来,希望对遇到相同问题的朋友一些启发。 1、下载安装包 Keil P…

新牛市新方向:探索加密货币生态的未来

序章:牛市来袭,新的探索 新的牛市来临,带来了加密货币世界的一次次惊喜。比特币、以太坊、Solana等生态系统在这场盛宴中展现出各自的独特魅力,带来了一场场引人入胜的探索之旅。让我们跟随着这些生态系统的脚步,一起…

基础算法前缀和与差分

前言 本次博客会介绍一维和二维的前缀和,以及一维二维差分的基本使用,尽量画图,多使用配合文字 使大家理解,希望有所帮助吧 一维前缀和 问题描述 这里有一个长度为n的数组,我们要算出【2,5】区间的元素和 暴力思…

Mogdb 5.0新特性:SQL PATCH绑定执行计划

前言 熟悉Oracle的dba都知道,生产系统出现性能问题时,往往是SQL走错了执行计划,紧急情况下,无法及时修改应用代码,dba可以采用多种方式针对于某类SQL进行执行计划绑定,比如SQL Profile、SPM、SQL Plan Base…