题目描述整理
在通信系统的应用中,需要对用户进行调度,使得系统资源的消耗尽可能优化。每个用户可以选择三种调度策略(A、B或C),相邻用户不能使用相同的策略。根据不同参数选择的策略,消耗的资源由具体数值来表示。
输入格式
-
第一行包含一个整数 ( n ),表示用户的数量。
-
接下来的 ( n ) 行分别列出每个用户在采用策略 A、B 和 C 下产生的系统资源消耗,格式为:
- ( \text{resA} ; \text{resB} ; \text{resC} )
- 其中 ( \text{resA} )、( \text{resB} ) 和 ( \text{resC} ) 为对应策略的资源消耗值。
输出格式
- 输出一个整数,表示最优策略组合下的总系统资源消耗。
调度规则
- 相邻用户不能选择相同的调度策略。
- 算法是局部最优:每用户选当前可以选择的策略中资源消耗最小的。
- 如果多个策略的消耗相同,则选择策略中的最后一个(即优先选择C,再选择B,最后选择A)。
示例
输入示例:
3
15 8 17
12 20 9
11 7 5
输出示例:
24
解释说明:
- 第一位用户选用 B 策略(消耗 8)。
- 第二位用户选用 C 策略(消耗 9)。
- 第三位用户选用 B 策略(消耗 7)。
所有用户的资源消耗合计为 8 + 9 + 7 = 24。
python源码
import sys
# 输入获取
user_count = int(input()) # 用户数量
resource_consumptions = [list(map(int, input().split())) for _ in range(user_count)] # 用户的资源消耗
def find_min_resource_index(resource_array, excluded_index):
"""
在给定的资源消耗数组中,寻找资源消耗最小的策略索引,排除掉指定的索引。
:param resource_array: 各策略对应的资源消耗值
:param excluded_index: 排除的索引(相邻用户策略选择冲突避免)
:return: 最小资源值的策略索引
"""
min_resource_value = sys.maxsize # 设置一个初始最大的资源值
min_resource_index = -1 # 最小资源值的索引初始化为-1
for index in range(len(resource_array)):
if index == excluded_index:
continue # 跳过被排除的索引
if resource_array[index] < min_resource_value: # 如果当前资源值更小
min_resource_value = resource_array[index] # 更新最小资源值
min_resource_index = index # 更新最小资源值的索引
return min_resource_index # 返回最小资源值索引
# 算法入口
def calculate_total_resource_consumption():
previous_strategy_index = -1 # 前一个用户策略索引初始化为-1
total_consumption = 0 # 总资源消耗初始化为0
for user_index in range(user_count):
previous_strategy_index = find_min_resource_index(resource_consumptions[user_index], previous_strategy_index) # 找到当前用户可选的最小资源策略索引
total_consumption += resource_consumptions[user_index][previous_strategy_index] # 累加资源消耗
return total_consumption # 返回总资源消耗
# 算法调用
print(calculate_total_resource_consumption()) # 输出总资源消耗
关于华为OD
华为OD机考笔试的难度逐年提升,对于算法基础薄弱或工作后较少接触算法的候选人来说,通过率较低,因此全面刷题库是提高通过率的关键。以下是对华为OD职位的一些关键信息整理:
华为OD职位特点:
- 校准与可靠性:经过专业校准,确保高可靠性和长期稳定性。
- 集成与功耗:传感器通过单线串行接口集成,体积小,功耗低。
- 适用场景:适用于多种应用场景,具有4针单排引脚封装,方便连接。
- 工作内容:与正式员工一起在华为研究所办公,工作内容基本相同。
- 工作时间:弹性工作制,一般一二四需补工时至晚上20:30,三五正常下班,周末双休,月末周六加班双倍工资。
- 学历与经验:要求本科及以上学历,理工类专业优先,有编程语言基础和基础算法知识。
- 转正要求:工作满一年,通过专业级可信认证,绩效至少拿过一次A,部门有转正指标。
候选人常见关注问题:
- 外包职位:外包职位并非没有技术学习机会,关键在于个人能力和项目经验。
- OD转华为正编:需要连续两次绩效A,但并非绝对要求,关键在于个人能力和部门指标。
- OD稳定性:华为业务基本稳定,外包职位相比互联网和传统外包公司稳定性更高。
- OD试用期转正:一般要求通过入门级或工作级可信认证,通过率较高。
- OD转华为正编要求:工作满一年,通过专业级可信认证,绩效至少拿过一次A,部门有转正指标。
职位适合的候选人:
- 编程水平、项目经验薄弱,希望快速获得核心项目经验的毕业生。
- 工作经验丰富,希望突破现有薪资待遇和职业发展的专业人士。
- 有相关基础或经验,希望获得职业转型机会的候选人。
- 想加入华为但个人能力未达社招正编要求的候选人。
以下是针对华为OD机试E卷的高效备考指南,结合你的需求整理成结构化方案:
一、E卷题型构成分析
- 题目来源:1道E卷新题 + 2道D/A/B/C卷旧题(新旧比例约1:2)
- 分数分布:2道100分题(一星难度) + 1道200分题(二星难度)
- 通过标准:总分150分(非目标院校建议260+安全分,300+对定级/薪资有利)
二、高效刷题策略
1. 优先级排序
- Step1:优先刷E卷新题(题库持续更新中,关注最新动态)
- Step2:重点突破D/A/B/C卷高频旧题(占2/3题目,原题概率高)
- Step3:按算法分类专项练习(参考下文分类题单)
2. 分类刷题法(附高频题型)
算法分类 | 经典题型举例 | 刷题建议 |
---|---|---|
字符串处理 | 字符串反转、KMP算法、正则匹配 | 熟悉API,避免超时 |
动态规划 | 背包问题、最长递增子序列、编辑距离 | 掌握状态转移方程 |
DFS/BFS | 岛屿问题、迷宫路径、拓扑排序 | 模板题反复练习 |
贪心算法 | 区间调度、分糖果、跳跃游戏 | 验证最优性条件 |
二叉树 | 遍历、最近公共祖先、序列化 | 递归/迭代双解法 |
并查集 | 朋友圈问题、连通分量 | 路径压缩优化 |
滑动窗口 | 最长无重复子串、最小覆盖子串 | 边界条件敏感 |
3. 刷题技巧
- 限时训练:100分题40分钟/题,200分题60分钟/题(模拟考试压力)
- 闭卷编码:先独立完成再看解析,避免“虚假掌握”
- 查重规避:修改变量名、调整逻辑顺序、添加注释(直接复制易被查重)
三、考试实战技巧
-
环境准备
- 使用Chrome浏览器,关闭无关网页(防弹窗违规)
- IDE本地编码后粘贴(避免在线编辑器卡顿)
-
答题策略
- 先做100分题保底,再攻200分题(时间分配建议:40min+40min+60min)
- 自测用例覆盖边界值(如空输入、超大数组等)
-
异常处理
- 断网/死机可重新登录恢复进度
- 中途离开需申请(否则可能判作弊)
四、资源推荐
- 题库更新:关注官方动态及社区新题共享
- 工具辅助:
- ChatGPT解析算法思路(但需自行编码实现)
- LeetCode按标签筛选相似题(如华为常考的BFS/DP题型)
五、注意事项
- 冷冻期:未通过需等待6个月才能再考
- 语言选择:Java/Python更易上手(但需熟记基础API)
- 代码规范:注释清晰,避免
ctrl+s
误操作