商城双11大促销 - 华为机试真题题解

2024-03-03 13:36

本文主要是介绍商城双11大促销 - 华为机试真题题解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

考试平台: 时习知

分值: 300分(第三题)

考试时间: 两小时(共3题)

alt

题目描述

商城双11大促销,每种商品限购两件。一共有M种商品。每种商品的原始价格为X元。

买一件折扣价是Y元,买两件折扣价是Z元。其中X>=Y>=Z。

小明银行卡里有余额N元。在N元的范围内怎么购买商品才可以获得最多的优惠金额?

输入

第1行: 商品种类M,M的范围是[1-20]。

第2到M+1行: 每个商品的原始价格X元,购买一件的折扣价Y元,购买两件的折扣价Z元。X、Y、Z的范围是[1-1000]。

第M+2行: 小明银行卡余额N元。N的范围是[1-20000],N元至少可以购买一件商品。

输出

输出可以获得的最多优惠金额

示例1

输入:
2
10 8 6
8 6 6
20输出:
10解释: 
第一个商品买2件,第二个商品买1件。总共花费2*6+6=18元在20元范围内。第一件商品优惠8元(2件),第二件商品优惠2元(1件)。总共优惠10元。

示例2

输入:
3
10 8 4
20 17 13
30 20 10
50输出:
55解释: 
第一个商品买2件,第二个商品买1件第三个商品买2件。总共花费 24+17+210=41元在50元范围内。
第一件商品优惠12元(2件),第二件商品优惠3元(1件),第三件商品优惠40元(2件),总共优惠55元。

题解

这段 C++ 代码使用了动态规划的方法解决了问题。以下是对代码的一些解释:

  • X[i] 表示第 i 种商品的原价,Y[i] 表示购买一件的折扣价,Z[i] 表示购买两件的折扣价。
  • dp[i][j] 表示前 i 种商品花费不超过 j 元所能获得的最大优惠金额。
  • 通过双重循环遍历商品和银行卡余额,使用状态转移方程更新 dp[i][j] 的值。
  • 最后输出 dp[M][N] 即为问题的答案。

这个问题是一个典型的动态规划问题,利用动态规划的思想,通过填表的方式计算出最优解。

在这个过程中,需要考虑当前商品购买一件和购买两件的情况,以及与之前的状态之间的关系。

算法的时间复杂度为 O(M * N),其中 M 为商品种类,N 为小明的银行卡余额。

C++

#include <algorithm>
#include <iostream>
#include <vector>using namespace std;int main()
{int M;   // 商品种类cin >> M;// 原价,购买一件的折扣价,购买两件的折扣价vector<int> X(M), Y(M), Z(M);for (int i = 0; i < M; ++i) {cin >> X[i] >> Y[i] >> Z[i];}int N;   // 银行卡余额cin >> N;// dp[i][j]表示前i个商品,花费不超过j元所能获得的最大优惠金额vector<vector<int>> dp(M + 1, vector<int>(N + 1, 0));for (int i = 1; i <= M; ++i) {for (int j = 1; j <= N; ++j) {// 不购买当前商品dp[i][j] = dp[i - 1][j];// 购买一件当前商品if (j >= Y[i - 1]) {int discount = X[i - 1] - Y[i - 1];   // 原价 - 优惠价 = 优惠金额dp[i][j]     = max(dp[i][j], dp[i - 1][j - Y[i - 1]] + discount);}// 购买两件当前商品if (j >= 2 * Z[i - 1]) {int discount = (X[i - 1] - Z[i - 1]) * 2;dp[i][j]     = max(dp[i][j], dp[i - 1][j - 2 * Z[i - 1]] + discount);}}}cout << dp[M][N] << endl;return 0;
}

🙏整理题解不易, 如果有帮助到您,请给点个赞 ‍❤️‍ 和收藏 ⭐,让更多的人看到。🙏🙏🙏

这篇关于商城双11大促销 - 华为机试真题题解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/769769

相关文章

你的华为手机升级了吗? 鸿蒙NEXT多连推5.0.123版本变化颇多

《你的华为手机升级了吗?鸿蒙NEXT多连推5.0.123版本变化颇多》现在的手机系统更新可不仅仅是修修补补那么简单了,华为手机的鸿蒙系统最近可是动作频频,给用户们带来了不少惊喜... 为了让用户的使用体验变得很好,华为手机不仅发布了一系列给力的新机,还在操作系统方面进行了疯狂的发力。尤其是近期,不仅鸿蒙O

C++ | Leetcode C++题解之第393题UTF-8编码验证

题目: 题解: class Solution {public:static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num &

C语言 | Leetcode C语言题解之第393题UTF-8编码验证

题目: 题解: static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num & MASK1) == 0) {return

机试算法模拟题 服务中心选址

题目描述 一个快递公司希望在一条街道建立新的服务中心。公司统计了该街道中所有区域在地图上的位置,并希望能够以此为依据为新的服务中心选址:使服务中心到所有区域的距离的总和最小。 给你一个数组positions,其中positions[i] = [left, right] 表示第 i 个区域在街道上的位置,其中left代表区域的左侧的起点,right代表区域的右侧终点,假设服务中心的位置为loca

C - Word Ladder题解

C - Word Ladder 题解 解题思路: 先输入两个字符串S 和t 然后在S和T中寻找有多少个字符不同的个数(也就是需要变换多少次) 开始替换时: tips: 字符串下标以0开始 我们定义两个变量a和b,用于记录当前遍历到的字符 首先是判断:如果这时a已经==b了,那么就跳过,不用管; 如果a大于b的话:那么我们就让s中的第i项替换成b,接着就直接输出S就行了。 这样

828华为云征文|华为云Flexus X实例docker部署rancher并构建k8s集群

828华为云征文|华为云Flexus X实例docker部署rancher并构建k8s集群 华为云最近正在举办828 B2B企业节,Flexus X实例的促销力度非常大,特别适合那些对算力性能有高要求的小伙伴。如果你有自建MySQL、Redis、Nginx等服务的需求,一定不要错过这个机会。赶紧去看看吧! 什么是华为云Flexus X实例 华为云Flexus X实例云服务是新一代开箱即用、体

【秋招笔试】9.07米哈游秋招改编题-三语言题解

🍭 大家好这里是 春秋招笔试突围,一起备战大厂笔试 💻 ACM金牌团队🏅️ | 多次AK大厂笔试 | 大厂实习经历 ✨ 本系列打算持续跟新 春秋招笔试题 👏 感谢大家的订阅➕ 和 喜欢💗 和 手里的小花花🌸 ✨ 笔试合集传送们 -> 🧷春秋招笔试合集 🍒 本专栏已收集 100+ 套笔试题,笔试真题 会在第一时间跟新 🍄 题面描述等均已改编,如果和你笔试题看到的题面描述

LeetCode 第414场周赛个人题解

目录 Q1. 将日期转换为二进制表示 原题链接 思路分析 AC代码 Q2. 范围内整数的最大得分 原题链接 思路分析 AC代码 Q3. 到达数组末尾的最大得分 原题链接 思路分析 AC代码 Q4. 吃掉所有兵需要的最多移动次数 原题链接 思路分析 AC代码 Q1. 将日期转换为二进制表示 原题链接 Q1. 将日期转换为二进制表示 思路分析

华为OD机试真题-学生方阵-2024年OD统一考试(E卷)

题目描述 学校组织活动,将学生排成一个矩形方阵。 请在矩形方阵中找到最大的位置相连的男生数量。这个相连位置在一个直线上,方向可以是水平的,垂直的,成对角线的或者呈反对角线的。 注:学生个数不会超过10000 输入描述 输入的第一行为矩阵的行数和列数, 接下来的 n行为矩阵元素,元素间用""分隔。 输出描述 输出一个整数,表示矩阵中最长的位

2024年AMC10美国数学竞赛倒计时两个月:吃透1250道真题和知识点(持续)

根据通知,2024年AMC10美国数学竞赛的报名还有两周,正式比赛还有两个月就要开始了。计划参赛的孩子们要记好时间,认真备考,最后冲刺再提高成绩。 那么如何备考2024年AMC10美国数学竞赛呢?做真题,吃透真题和背后的知识点是备考AMC8、AMC10有效的方法之一。通过做真题,可以帮助孩子找到真实竞赛的感觉,而且更加贴近比赛的内容,可以通过真题查漏补缺,更有针对性的补齐知识的短板。