AVRIL_START_JANCOKALIVEAVRIL_END_JANCOK Interactive Terminal

Command Executor

**智能家居模式调度优化** - 魔改工程师

**智能家居模式调度优化**

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

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

题目描述

在一个智能家居系统中,用户可以设置多个“自动化联动”模式。每个模式 modes[i]=[start_time,end_time,power] 描述如下:

  • 模式在左闭右开区间 [start_time,end_time)(单位:秒)内处于运行状态
  • 为了简化处理,start_timeend_time 已转化为相对于系统启动初始时间点的秒数
  • 运行期间,每秒消耗固定功率 power

已知家里电网的最高承受功率 max_power。若同一时刻有多个模式同时运行,则总功率为各模式功率之和。如果总功率大于 max_power,则会导致跳闸。

系统允许永久删除(关闭)任意若干个模式,使剩余模式在任意时刻同时运行时永不跳闸。

请你计算:最少需要删除多少个模式?

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

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

输入描述

  • max_power:整数代表用户电网能承受的最大总电功率,取值 1 <= max_power <= 10^6

  • modes:二维数组,每个子数组 modes[i]=[start_time,end_time,power],表示第 i 个智能模式的启动时间、结束时间以及运行它所需要的电功率。

    • start_time,end_time:取值 0 <= start_time < end_time <= 10^5
    • power:取值 1 <= power <= 10^4
    • 模式数量取值 1 <= n <= 22

输入为两行:

max_power
modes

输出描述

最少需要删除的模式个数。

示例1

输入

10
[[0,500,5],[400,600,7],[550,700,4]]

输出

1

说明

  • 最高承受功率 max_power10
  • 模式 0 在时间范围 [0,500) 运行,功率 5
  • 模式 1 在时间范围 [400,600) 运行,功率 7
  • 模式 2 在时间范围 [550,700) 运行,功率 4
  • (400,500) 区间内,模式 0 和 1 同时运行,功率 5+7=12>10,发生跳闸
  • 删除 1 个模式即可避免(删除模式 1,保留 0 和 2)

示例2

输入

10
[[0,300,5],[400,600,7],[700,900,3]]

输出

说明

  • 3 个模式时间上互不重叠,可同时安全运行

示例3

输入

10
[[0,10,6],[0,10,6]]

输出

1

说明

  • 两个模式完全重叠,功率均为 6,同时运行为 12>10,必须删除一个

解题思路

核心思想

模式数量最多只有 22,可以先删掉所有单独就超过 max_power 的模式,再在剩余模式中做搜索。

为了快速判断一个保留集合是否会跳闸,把所有模式的起止时间离散化成若干时间段。对于每个时间段,只要总功率不超过 max_power 就合法。

在搜索中优先尝试保留模式,并用“当前已保留数量 + 剩余模式数量”剪枝,找到最多可保留的模式数,答案就是总模式数减去最多可保留数,再加上必须删除的超限模式数。

算法步骤

  1. 过滤掉单独功率就大于 max_power 的模式,这些模式必须删除。
  2. 收集剩余模式的所有起止时间并排序去重。
  3. 将每个模式映射到离散时间段区间。
  4. 深度优先搜索每个模式“保留/删除”两种选择。
  5. 保留时检查它覆盖的所有时间段功率是否会超限。
  6. 用上界剪枝,维护最多可保留模式数。
  7. 统计最终最少删除数。

复杂度分析

设剩余模式数为 m,离散后时间段数为 t

  • 时间复杂度:O(2^m * t),在 m <= 22 下可接受
  • 空间复杂度:`O(t +
THE END