8.2华为OD机试真题 新系统 - 战士技能规划设计 (Java/Py/C/C++/Js/Go)

战士技能规划设计

2026 华为OD机试真题 8月2日华为OD上机新系统考试真题 200 分题型

点击查看华为 OD 机试真题完整目录:2026最新华为OD机试新系统卷 + 双机位C卷 真题题库目录|全覆盖题库 + 逐点算法考点详解

题目描述

你为一款动作游戏设计战士角色的技能:战士每个技能会消耗不同能量,释放技能有 2 个约束:连续释放技能数量不能超过 m 个,技能能量总和不能超过能量上限 k;如果超过则必须中断当前技能,进入调息状态(即分段)。

战士有一项爆发技巧:在单次战斗中有一次能量上限翻倍至 2k 的机会,此项场景下战士需使用连续的 w 个技能(技能数量限制 m 依然生效)。

任务目标:

作为战术分析师,你需要为战士规划最优的技能释放序列。给定一套技能的能量消耗列表 a,请计算在合理使用爆发机会(或选择不使用)的前提下,释放完所有技能所需的最少分段数(即最少调息次数)。

若存在某个技能的能耗过高,即使开启爆发也无法释放(大于 2k),则判定为无解,返回 −1。

输入描述

输入参数说明:

  • k: 能量上限,正整数
  • m: 单次调息最大技能数,正整数
  • w: 爆发持续技能数,正整数
  • a: 技能能量消耗列表,长度为 n,每个元素为正整数

输入为一行,格式为:

k,m,w,[a1,a2,...,an]

数组中允许出现空格,例如 [1, 1, 1]

数据范围:

  • n 为技能数量,即 a 的长度
  • 1≤w≤n
  • 1≤n≤100000
  • 1≤m≤n
  • 1≤k≤1000000000
  • 1≤a[i]≤1000000000

输出描述

输出满足条件的最少分段数(最少调息次数)。若无解则输出 −1。

示例1

输入

5,3,2,[3,4,3,4]

输出

3

说明

爆发窗口覆盖索引 0∼1 [3,4] 为 1 段,剩余 [3],[4] 各 1 段 → 共 3 段。

示例2

输入

10,5,3,[1, 1, 1, 1, 1]

输出

1

说明

sum(a)=5≤k=10 且 n=5≤m=5,无需爆发即可 1 段放完。若开启爆发,窗口最多覆盖 w=3 个技能,剩余 1 个技能需另开 1 段,反而变成 2 段,因此不使用爆发更优。

解题思路

核心思想

普通释放时,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

算法大师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值