9.6华为OD机试真题 新系统 – 少儿爬山闯关积分游戏 (JavaPyCC++JsGo)
2026 华为OD机试真题9月6日华为OD上机新系统考试真题 100 分题型
点击查看华为 OD 机试真题完整目录:2026最新华为OD机试新系统卷 + 双机位C卷 真题题库目录|全覆盖题库 + 逐点算法考点详解
题目描述
山路一共设有 n 个关卡,按 1∼n 顺序排列。当前位于 1 号关卡,必须按照关卡从小到大闯关,且必须到达最后第 n 号关卡才算寻宝成功。每个关卡都有对应的宝藏分值(可能为负数),经过当前关卡即可获得该关卡分值,分数持续累加。
移动规则:
- 从当前关卡,下一次只能在前方 1 关或者 2 关处打卡;
- 限制规则:不能连续两次都一次性跳 2 关,违反该规则的路线无效;
请求出:所有合法路线中,能够收集到的最大累加总分。
2026 华为OD机试真题9月6日华为OD上机新系统考试真题 100 分题型
输入描述
参数1:整数 n,代表关卡数量
参数2:整数数组,依次表示第 1∼n 关的宝藏分值
1≤n≤20
每关分值:−999≤val≤999
输出描述
输出一个整数,代表合法路线的最大累加得分。
示例1
输入
5
10,5,8,3,15
输出
41
说明
- 合法路线示例:1→2→3→4→5,无连续跳两关,总分:10+5+8+3+15=41
- 路线 1→3→5 连续两次跳 2 关,违规,不计入统计。
示例2
输入
4
10,1,1,100
输出
112
说明
- 路线 1→2→3→4 (1,1,1): 10+1+1+100=112
- 路线 1→3→4 (2,1): 10+1+100=111
- 路线 1→2→4 (1,2): 10+1+100=111
- 最大值 112。
解题思路
核心思想
每次只能向前跳 1 关或 2 关,并且不能连续两次都跳 2 关。为了判断下一跳是否合法,状态中必须记录“上一次跳了几关”。
定义两个状态,并用滚动变量保存:
oneStep:到达当前关卡时,上一次跳1关的最大得分;twoStep:到达当前关卡时,上一次跳2关的最大得分。
计算第 i 关时,如果最后一步跳 1 关,则可以从第 i-1 关的两种状态转移而来;如果最后一步跳 2 关,则只能从第 i-2 关且上一跳为 1 关的状态转移而来。由于每次只依赖前一关和前两关的少量状态,可以把空间优化到常数级。
算法步骤
- 起点为第
1关,先获得第1关分值。 - 维护上一关的
prevOne、prevTwo,分别表示最后跳1关和最后跳2关到达上一关的最大得分。 - 额外维护
prevPrevOne,表示最后跳1关到达前两关位置的最大得分。 - 从第
2关开始向后扫描:curOne = max(prevOne, prevTwo) + score[i];curTwo = prevPrevOne + score[i],且只在i >= 2时有效。
- 滚动更新状态,最终返回最后一关两种状态中的较大值。
复杂度分析
设关卡数量为 n。
- 时间复杂度:
O(n) - 空间复杂度:`O
版权声明:
作者:魔改工程师
链接:https://www.sylblog.xin/archives/885
文章版权归作者所有,未经允许请勿转载。
THE END