华为OD机试C卷- 高效货运(Java & JS & Python & C).md-私信看全套OD代码及解析
### 华为OD机试C卷 - 高效货运题目解析与实现 #### 题目背景 在本题目中,我们关注一个货运公司的实际业务场景:如何在满足特定条件下,通过合理安排不同类型的货物来最大化单次运输的利润。 #### 题目描述 假设老李是该货运公司的承运人,他驾驶的货车有一个确定的最大载重量`wt`。现需装载两种类型的货物——货物A和货物B,它们各自的单件重量分别为`wa`和`wb`,单件运费利润分别为`pa`和`pb`。每次发车时,货车必须同时装载货物A和货物B,并且货物总量恰好等于货车的最大载重量`wt`。此外,这两种货物均不能分割装运。问题在于,如何安排货物A和货物B的数量,使得单次满载运输能获得的最高利润是多少? #### 输入描述 - 第一列输入为货物A的单件重量`wa`,范围:`0 < wa < 10000` - 第二列输入为货物B的单件重量`wb`,范围:`0 < wb < 10000` - 第三列输入为货车的额定载重`wt`,范围:`0 < wt < 100000` - 第四列输入为货物A的单件运费利润`pa`,范围:`0 < pa < 1000` - 第五列输入为货物B的单件运费利润`pb`,范围:`0 < pb < 1000` #### 输出描述 - 单次满载运输的最高利润 #### 题目解析 这是一个经典的组合优化问题,类似于背包问题但又有其独特之处。在解决此类问题时,我们需要考虑所有可能的装载组合,并从中筛选出最优解。 具体来说,我们需要对货物A和货物B的所有可能数量进行遍历,计算每种组合的总重量是否等于货车的额定载重`wt`,并同时记录下这些组合中的最高利润值。 #### 解决方案 ##### Java 实现 ```java import java.util.Scanner; public class MaxProfit { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int wa = scanner.nextInt(); // 货物A单件重量 int wb = scanner.nextInt(); // 货物B单件重量 int wt = scanner.nextInt(); // 货车额定载重 int pa = scanner.nextInt(); // 货物A单件运费利润 int pb = scanner.nextInt(); // 货物B单件运费利润 scanner.close(); int maxProfit = 0; // 遍历所有可能的装载组合 for (int countA = 0; countA * wa <= wt; countA++) { for (int countB = 0; countB * wb <= wt && countA > 0; countB++) { // 确保有至少一件货物A if ((countA * wa + countB * wb) == wt) { int profit = countA * pa + countB * pb; maxProfit = Math.max(maxProfit, profit); } } } System.out.println(maxProfit); } } ``` ##### Python 实现 ```python wa, wb, wt, pa, pb = map(int, input().split()) max_profit = 0 # 遍历所有可能的装载组合 for countA in range(wt // wa + 1): for countB in range(1, wt // wb + 1): # 从1开始,确保有至少一件货物B if countA * wa + countB * wb == wt: profit = countA * pa + countB * pb max_profit = max(max_profit, profit) print(max_profit) ``` ##### JavaScript 实现 ```javascript const readline = require('readline').createInterface({ input: process.stdin, output: process.stdout }); readline.on('line', (input) => { const [wa, wb, wt, pa, pb] = input.split(' ').map(Number); let maxProfit = 0; // 遍历所有可能的装载组合 for (let countA = 0; countA * wa <= wt; countA++) { for (let countB = 1; countB * wb <= wt; countB++) { // 从1开始,确保有至少一件货物B if ((countA * wa + countB * wb) === wt) { const profit = countA * pa + countB * pb; maxProfit = Math.max(maxProfit, profit); } } } console.log(maxProfit); readline.close(); }); ``` 以上就是针对此题目的详细解析及实现方法,希望能帮助到准备参加华为OD机试的同学更好地理解和解决问题。
- 粉丝: 2w+
- 资源: 1618
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 纯css3发光霓虹灯文字闪烁特效代码.zip
- 用VBS制作自己的进度条
- 电脑说话VBS什么电脑都能用
- 利用HTML+CSS+JS的国漫分享网站(响应式)
- 练习springboot1 项目 模拟高并发秒杀,实现基本的登录、查看商品列表、秒杀、下单等功能,简单实现了系统缓存、降级和限流
- 一个社区论坛项目,技术栈:spring boot + thymeleaf+Redis 实现的功能:发帖,关注,点赞,私信,系统通知,日活统计.zip
- 会员管理系统.zip-会员管理系统.zip
- 解压软件 ZArchiver.apk
- 《系统分析和设计》课程作业-面向中国各大城市的医院预约挂号系统.zip
- SM4学习备份,有用的