华为机考入门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、主件+附件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.mfbz.cn/a/555636.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【技术变现之道】如何打造IT行业的超级个体?

前言 在当今的数字化时代,IT行业蓬勃发展,为具备技术专长的个人提供了无限的可能性。想要成为IT行业的超级个体,实现知识与技能的变现吗?以下是一些高效途径,助你一臂之力! 1. 独立接单外包 1&#xff09…

Flask项目在Pycharm中设置局域网访问

打开PyCharm导入本应用。点击Run标签中的Edit Configurations 其中Target type选择Script path,Target填入本项目中app.py的路径,Additional optional填入--host0.0.0.0(不要有空格)。 再重新运行项目,会观察到除了原本的http://127.0.0.1:50…

上线流程及操作

上节回顾 1 搜索功能-前端:搜索框,搜索结果页面-后端:一种类型课程-APIResponse(actual_courseres.data.get(results),free_course[],light_course[])-搜索,如果数据量很大,直接使用mysql,效率非常低--》E…

分类预测 | Matlab实现PSO-LSSVM粒子群算法优化最小二乘支持向量机数据分类预测

分类预测 | Matlab实现PSO-LSSVM粒子群算法优化最小二乘支持向量机数据分类预测 目录 分类预测 | Matlab实现PSO-LSSVM粒子群算法优化最小二乘支持向量机数据分类预测分类效果基本介绍程序设计参考资料 分类效果 基本介绍 1.Matlab实现PSO-LSSVM粒子群算法优化最小二乘支持向量…

FebHost:注册.CA域名的企业有什么限制?

在加拿大,只要满足加拿大互联网注册管理局的“加拿大注册要求”,任何类型的企业都可以注册.CA域名。这些要求的目的是为了确保.CA域名空间作为一个重要的公共资源得到合理的使用和开发,以促进所有加拿大人的社会和经济发展。 以下是一些主要…

0418WeCross搭建 + Caliper测试TPS

1. 基本信息 虚拟机名称:Pure-Ununtu18.04 WeCross位置:/root/wecross-demo 2. 搭建并启动WeCross 参考官方指导文档 https://wecross.readthedocs.io/zh-cn/v1.2.0/docs/tutorial/demo/demo.html 访问WeCross网页管理平台 http://localhost:8250/s/…

嵌入式科普(15)小米su7成本分析和拆解之智驶、座舱分析

目录 一、概述 二、小米su7成本分析 2.1 整车成本构成 2.2 三电系统 2.3 车身与底盘 2.3 智能网联 2.4 内外饰 三、小米su7拆解之智驶、座舱分析 3.1 主要芯片 3.2 智能驾驶&智能座舱 四、NXP S32K324汽车通用微控制器 嵌入式科普(15)小米su7成本分析和拆解之智…

问答营销之官方号问答推广技巧

问答营销作为一种网络推广的重要手段,受到各大品牌企业的关注。实战中,问答营销有新起提问再回答和直接回复老问题两种形式,一般做企业官方号问答营销都是选择后者。这里小马识途营销顾问详细解析下开展老问题回复营销的思路和步骤。 一、分析…

2024最新大厂C++面试真题合集,玩转互联网公司面试!

小米C 1. 进程和线程的区别 进程是操作系统分配资源和调度的独立单位,拥有自己的地址空间和系统资源。线程是进程内部的执行单元,共享属于相同进程的资源,但是执行切换代价更小。进程间相互独立,稳定性较高;线程间共…

C++修炼之路之反向迭代器和非模板参数,模板特化,分离编译

目录 前言 一:反向迭代器 二:非类型模板参数 三:模板的特化 四:模板的分离编译 五:模板的优点与缺点 接下来的日子会顺顺利利,万事胜意,生活明朗-----------林辞忧 前言 在vector&am…

代码随想录第40天|343. 整数拆分

343. 整数拆分 343. 整数拆分 - 力扣(LeetCode) 代码随想录 (programmercarl.com) 动态规划,本题关键在于理解递推公式!| LeetCode:343. 整数拆分_哔哩哔哩_bilibili 给定一个正整数 n ,将其拆分为 k 个 正…

2024-4-18 群讨论:Java Agent,JFR 与 JIT 的一些讨论

以下来自本人拉的一个关于 Java 技术的讨论群。关注公众号:hashcon,私信进群拉你 命令行中带 -XX:StartFlightRecording 启动,同时带 -javaagent,那么谁先启动?jfr能采集到agent启动前后资源消耗情况不? 不…

基于深度学习的手写汉字识别系统(含PyQt+代码+训练数据集)

基于深度学习的手写汉字识别系统(含PyQt代码训练数据集) 前言一、数据集1.1 数据集介绍1.2 数据预处理 二、模型搭建三、训练与测试3.1 模型训练3.2 模型测试 四、PyQt界面实现参考资料 前言 本项目是基于深度学习网络模型的人脸表情识别系统&#xff0…

c++编程(6)——类与对象(4)运算符重载、赋值重载函数

欢迎来到博主的专栏——C编程 博主ID:代码小豪 文章目录 运算符重载赋值重载函数默认赋值重载函数其他运算符重载函数 运算符重载 重载这个概念在c中已经出现两次了,在前面的文章中,函数重载指的是可以用相同名字的函数实现不同的功能。而运…

【WebSocket连接异常】前端使用WebSocket子协议传递token时,Java后端的正确打开方式!!!

文章目录 1. 背景2. 代码实现和异常发现3. 解决异常3.1 从 URL入手3.2 从 WebSocket子协议的使用方式入手(真正原因) 4. 总结(仍然存在的问题) 前言: 本篇文章记录的是使用WebSocket进行双向通信时踩过的坑&#xff0c…

将gdip-yolo集成到yolov9模型项目中(支持预训练的yolov9模型)

1、yolov9模型概述 1.1 yolov9 YOLOv9意味着实时目标检测的重大进步,引入了可编程梯度信息(PGI)和通用高效层聚合网络(GELAN)等开创性技术。该模型在效率、准确性和适应性方面取得了显著改进,在MS COCO数…

「 安全工具介绍 」软件成分分析工具Black Duck,业界排名TOP 1的SCA工具

在现代的 DevOps 或 DevSecOps 环境中,SCA 激发了“左移”范式的采用。提早进行持续的 SCA 测试,使开发人员和安全团队能够在不影响安全性和质量的情况下提高生产力。前期在博文《「 网络安全常用术语解读 」软件成分分析SCA详解:从发展背景到…

Qt-饼图示范

1.效果图 2.代码如下 2.1 .h文件 #ifndef PIECHARTWIDGET_H #define PIECHARTWIDGET_H#include <QWidget> #include <QChartView> #include <QPieSeries>#include<QVBoxLayout> #include<QMessageBox> #include <QtCharts>struct PieDat…

FastAPI - uvicorn设置 logger 日志格式

怎么将日志打印到文件 在main.py加入log_config“./uvicorn_config.json” import uvicornif __name__ "__main__":uvicorn.run("app:app", host"0.0.0.0", port8000, log_config"./uvicorn_config.json")uvicorn_config.json {&qu…

“互联网+”创意创业大赛活动方案

大赛历时6个月&#xff0c;总体分两个赛程&#xff1a;一是策划创意阶段。评审的是方案。二是组织实施阶段。通过阶段一立项的项目由公司协助实施&#xff0c;最终评审的是项目落实情况。学生可两个赛程单独参加&#xff0c;也可连续参加。 具体流程及时间安排如下&#xff1a;…