华为机试题练习-HJ16 购物单

news/2024/5/7 7:07:49/文章来源:https://blog.csdn.net/qq_36178962/article/details/126769886

HJ16 购物单背包问题-01背包

中等 通过率:23.60% 时间限制:1秒 空间限制:32M

知识点动态规划

warning 校招时部分企业笔试将禁止编程题跳出页面,为提前适应,练习时请使用在线自测,而非本地IDE。

描述

王强决定把年终奖用于购物,他把想买的物品分为两类:主件与附件,附件是从属于某个主件的,下表就是一些主件与附件的例子:

主件附件
电脑打印机,扫描仪
书柜图书
书桌台灯,文具
工作椅

如果要买归类为附件的物品,必须先买该附件所属的主件,且每件物品只能购买一次。

每个主件可以有 0 个、 1 个或 2 个附件。附件不再有从属于自己的附件。

王强查到了每件物品的价格(都是 10 元的整数倍),而他只有 N 元的预算。除此之外,他给每件物品规定了一个重要度,用整数 1 ~ 5 表示。他希望在花费不超过 N 元的前提下,使自己的满意度达到最大。

满意度是指所购买的每件物品的价格与重要度的乘积的总和,假设设第ii件物品的价格为v[i]v[i],重要度为w[i]w[i],共选中了kk件物品,编号依次为j_1,j_2,…,j_kj1,j2,…,j**k,则满意度为:v[j_1]w[j_1]+v[j_2]w[j_2]+ … +v[j_k]w[j_k]v[j1]∗w[j1]+v[j2]∗w*[j2]+…+v[j**k]∗w[j**k]。(其中 * 为乘号)

请你帮助王强计算可获得的最大的满意度。

输入描述:

输入的第 1 行,为两个正整数N,m,用一个空格隔开:

(其中 N ( N<32000 )表示总钱数, m (m <60 )为可购买的物品的个数。)

从第 2 行到第 m+1 行,第 j 行给出了编号为 j-1 的物品的基本数据,每行有 3 个非负整数 v p q

(其中 v 表示该物品的价格( v<10000 ), p 表示该物品的重要度( 1 ~ 5 ), q 表示该物品是主件还是附件。如果 q=0 ,表示该物品为主件,如果 q>0 ,表示该物品为附件, q 是所属主件的编号)

输出描述:

输出一个正整数,为张强可以获得的最大的满意度。

示例1

输入:

1000 5
800 2 0
400 5 1
300 5 1
400 3 0
500 2 0

复制

输出:

2200

复制

示例2

输入:

50 5
20 3 5
20 3 5
10 3 0
10 2 0
10 1 0

复制

输出:

130

复制

说明:

由第1行可知总钱数N为50以及希望购买的物品个数m为5;
第2和第3行的q为5,说明它们都是编号为5的物品的附件;
第4~6行的q都为0,说明它们都是主件,它们的编号依次为3~5;
所以物品的价格与重要度乘积的总和的最大值为10*1+20*3+20*3=130       

题解

0-1背包问题

这道题是经典的背包问题,首先是0-1背包问题

有一个背包可以装物品的总重量为W现有N个物品,每个物品W[i],价值在v[i],用背包装物品,能装的最大价值是多少

可以定义一个状态转移数组dp[i][j],表示前i个物品,背包总量为j的情况下能装的最大价值

状态转移方程为
dp[i][j]=max⁡(dp[i−1][j],dp[i−1][j−w[i]]+v[i])dp[i][j]=\max(dp[i-1][j], dp[i-1][j-w[i]] + v[i]) dp[i][j]=max(dp[i1][j],dp[i1][jw[i]]+v[i])
也就是说要么当前物品不放入背包dp[i-1][j],或者当前物品放入背包dp[i-1][j-w[i]] + v[i]

购物车思路

这道题本质上还是0-1背包问题,不过多了主件和附件,可以将主件和附件放在一起考虑,即考虑每个物品的时候要考虑每种可能出现的情况

  • 主件
  • 主件+附件1
  • 主件+附件2
  • 主件+附件1+附件2

可以使用一维数组优化状态转移方程空间复杂度,并用两个m+1行3列的数组分别存储物品的价格和满意度,代码如下:

import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt(), m = scanner.nextInt();int[][] price = new int[m + 1][3];int[][] importance = new int[m + 1][3];for (int i = 1; i <= m; i++) {int v = scanner.nextInt(), p = scanner.nextInt(), q = scanner.nextInt();int im = v * p;if (q == 0) {price[i][0] = v;importance[i][0] = im;} else {if (price[q][1] == 0) {price[q][1] = v;importance[q][1] = im;} else {price[q][2] = v;importance[q][2] = im;}}}int[] dp = new int[n + 1];for (int i = 1; i <= m; i++) {if (price[i][0] == 0)continue;for (int j = n; j >= price[i][0]; j--) {int a = price[i][0];int a1 = importance[i][0];int b = price[i][1];int b1 = importance[i][1];int c = price[i][2];int c1 = importance[i][2];if (j >= a) {dp[j] = Math.max(dp[j], dp[j-a] + a1);}if (j >= a + b)dp[j] = Math.max(dp[j], dp[j-a-b] + a1 + b1);if (j >= a + c)dp[j] = Math.max(dp[j], dp[j-a-c] + a1 + c1);if (j >= a + b + c)dp[j] = Math.max(dp[j], dp[j-a-b-c] + a1 + b1 + c1);}}System.out.println(dp[n]);}
}

image-20220907122609608
如果想查看其他的华为编程题可以查看牛客网的题库的名企真题的华为选项
华为编程题-牛客网

关于这部分的笔试练习,可以查看这篇文章华为编程题练习汇总

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

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

相关文章

探索 Sa-Token (二) 登录认证、权限认证

&#xff08;一&#xff09;登录认证 说明&#xff1a;因为这里没有连接数据&#xff0c;我模拟两个用户&#xff0c;用户&#xff1a;zhang &#xff0c;用户&#xff1a;liu&#xff0c;密码 123456 提前做了加密。 1.密码加密接口 /*** 加密* param pwd* return*/GetMappi…

系统优化 : 笔记本盖上休眠

如何使休眠可用按下键盘上的 Windows 按钮,打开开始菜单或开始屏幕。 搜索“cmd”。 在搜索结果中,右键单击“命令提示符”,然后选择“以管理员身份运行”。 当用户帐户控制提示时,选择“继续”。 在命令提示符处,键入 powercfg.exe /hibernate on,然后按 Enter。 键入“…

MySQL复制

环境条件master:192.168.247.20 rocky8.6 mysql8.0.26 slave: 192.168.247.21 rocky8.6 mysql8.0.26基本环境准备 hostnamectl set-hostname mysql-master-01 hostnamectl set-hostname mysql-slave-01主从安装mysql-server服务 yum -y install mysql-server systemctl enabl…

3、计算机系统漫游

目录1 计算机的信息2 编译系统3 编译系统4 高速缓存5 存储器层次结构6 操作系统6.1 操作系统的抽象表示6.2 进程 1 计算机的信息信息:就是位+上下文 系统中所有的信息,包括磁盘文件、内存中的程序,内存中存放的用户数据,以及网络上传输的数据,都是由一串0、1表示 位:指8位…

vue3项目-小兔鲜儿笔记-购物车02

1.购物车页面-列表展示-本地准备已选择的商品列表数据,已选择的商品件数以及需要支付的金额渲染模板// 有效商品列表 validList(state) {return state.list.filter((goods) => goods.isEffective && goods.stock > 0) }, // 有效商品件数 validTotal() {return …

django框架八

批量操作数据 自定义分页器(重在思路) form组件 modelform组件 cookie与session简介批量操作数据 浏览器访问一个django路由 立刻创建10万条数据并展示到前端页面create()、all() 涉及到大批量数据的创建 直接使用create可能会造成数据库崩溃批量数据创建>>>:bulk_cre…

07- 诊断事件diagnostic events的类图关系

文章目录 1 DEM模块的诊断事件diagnostic events的类图关系2 各个参数的含义介绍1 DEM模块的诊断事件diagnostic events的类图关系 这个时DEM模块的诊断事件diagnostic events的类图关系。 关于其在Davinci中的体现,请参考【06- 诊断事件DemEventParameter的配置】文章的介绍…

【日常】edge和chrome浏览器截屏工具快捷键

首先打开开发者工具 使用右键===>检查 就能打开开发者模式 在开发者模式下,快捷键ctrl+shift + p然后输入截屏,就能看到了 开源作品 GOFLY是一款基于Golang+Vue开发的在线客服系统,软件著作权编号:2021SR1462600。一套可私有化部署的在线客服系统,编译后的二进制文件可…

mysql在移机后的机器上配置(该机器重装了操作系统)

说明一切就绪后,唯有mysql没起来 连接本地数据库,mysql提示Can‘t connect to MySQL server on localhost (10061)解决办法_Geeca的博客-CSDN博客 https://blog.csdn.net/Geeca/article/details/125924886 本地无法启动MySQL服务,报的错误:1067,进程意外终止---解决_java奋…

PowerShell中异步方法的使用

问题 PowerShell脚本中有个文件上传功能,使用HttpClient 脱敏处理后基本就是这样子 $client = new-object System.Net.Http.HttpClient; $result = $client.PostAsync($URL,@{}).Result;别问为什么不用await,问就是有原因某天程序执行后,$result始终为空,也无异常 经过艰苦卓…

html对象常用属性和Window 对象属性

​/* *作者:呆萌老师 *☑csdn认证讲师 *☑51cto高级讲师 *☑腾讯课堂认证讲师 *☑网易云课堂认证讲师 *☑华为开发者学堂认证讲师 *☑爱奇艺千人名师计划成员 *在这里给大家分享技术、知识和生活 *各种干货,记得关注哦! *vx:it_daimeng */ html对象常用属性 取值赋值:inn…

Javaweb学习笔记第四弹

JDBC API详解 1、DriverManager作用: 1、注册驱动 registerDriver 2、获取数据库连接 getConnection 参数:1、url jdbc:mysql://localhost:3306/数据库名称 ​ 2、user 用户名 ​ 3、password 密码 注意:在url中,如果连接的是本机,并且…

Educational Codeforces Round 132 (Rated for Div. 2) A.B.D

A. Three Doors 题目链接&#xff1a; Problem - A - Codeforces 题面&#xff1a; 题意&#xff1a; 共有三扇门&#xff0c;一开始你有一把钥匙&#xff0c;有两扇门后面有钥匙&#xff0c;一扇门后面没有钥匙&#xff08;如果有钥匙&#xff0c;就会告诉你可以开哪扇门&am…

【Servlet】这一文详细的讲述了Servlet的知识,呕心沥血,终于文成。

文章目录什么是Servlet&#xff1f;Servlet的使用1、创建一个Web项目&#xff0c;并集成Tomcat2、引入Servlet的依赖3、创建一个Web启动类第一个是重写Servlet接口第二个是继承HttpServletServlet的理解Servlet的执行流程Servlet的生命周期加载和实例化阶段初始化阶段请求处理服…

202112-2 CCF 序列查询新解 (枚举 + 分段讨论 满分题解)

问题描述 序列查询新解 题目链接 解题思路 这个是上一道题目总结出来的规律 就是 f(x) i 当x属于 【a[i], a[i 1] &#xff09; 这个区间 也就是在这个区间里f(x)都等于一个数i 再看g(x)这个函数&#xff0c;g(x&#xff09; x / 常数&#xff0c;也可以知道&#xff0c;g…

微服务技术初探(go-micro)

微服务技术初探 微服务概述 微服务是近几年产生的新概念,与传统的单体式服务相比,微服务具有更好的扩展性及低耦合度等特性。微服务的重点在于服务的治理和调度。 微(micro):狭义来说就是体积小。 服务(service):区别于系统,服务一个或者一组相对较小且独立的功能单元,是…

c语言实现通讯录

目录标题通讯录的介绍通讯录的准备通讯录的初始化通讯录的添加通讯录的打印通讯录的查找并打印通讯录的删除通讯录的排序通讯录的修改通讯录的改善动态通讯录的实现以文件的形式存储通讯录的介绍 通讯录想必大家都应该不陌生&#xff0c;我们在手机里面都会有通讯录里面记录着…

爬虫数据可视化前的环境准备(已安装python环境前提下)

一、requests请求库安装 在桌面右键打开终端输入:pip install requests 二、Beautiful Soup解析库安装 终端输入:Beautiful Soup 4安装:pip install bs4 lxml安装:pip install lxml三、matplotlib安装下载miniconda下载地址:https://docs.conda.io/en/latest/miniconda.ht…

CF102411 ICPC 2019-2020 North-Western Russia Regional Contest题解

A Accurate Movement 签到 M Managing Difficulties 签到 B Bad Treap 已知\(y=\sin(x)\),要求给出数组\(a[n]\),满足\(\forall i,j\in[1,n],a[i]\neq a[j]\),都有\(\sin(a[i])\neq \sin(a[j])\)。 这里又一种不怎么玄的写法,就是我们找到一个整数\(x\),\(sin(x)\)非常非常…

计算机的概述

计算机是由硬件系统(hardware system)和软件系统(software system)两部分组成的。硬件系统电源电源是电脑中不可缺少的供电设备,它的作用是将220V交流电转换为电脑中使用的5V、12V、3.3V直流电,其性能的好坏,直接影响到电脑其他设备工作的稳定性,进而会影响整机的稳定性…