AVRIL_START_JANCOKALIVEAVRIL_END_JANCOK Interactive Terminal

Command Executor

**末世分配资源包** - 魔改工程师

**末世分配资源包**

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

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

题目描述

末世时代,政府为各地分配资源,现有资源分配表 nums[n],要求按如下规则分配给 k 个营地:

  1. 每个营地只分配一段连续的分配表
  2. 每个营地至少分到一份资源
  3. 所有的资源必须全部分出
  4. 分配方式:尽量平均分配(即:得利最大的营地获得的资源值尽量小)

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

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

输入描述

  1. 资源存储数组 nums[n](资源数 n: 0≤n≤1000,每份资源数:1≤nums[i]≤100000)
  2. 营地数 k(1≤k≤min(50,n))

输入为两行:

nums
k

其中 nums 为英文逗号分隔的整数数组。

输出描述

  1. 在最优平均分配情况下,得利最大团队所获得的资源数

示例1

输入

4,3,6,9,7
2

输出

16

说明

可能的切分:

  • [4],[3,6,9,7],最大值:25
  • [4,3],[6,9,7],最大值:22
  • [4,3,6],[9,7],最大值:16
  • [4,3,6,9],[7],最大值:22

因此,最大值最小的切分方式是第 3 种,返回 16

示例2

输入

3,4,2,1
4

输出

4

说明

可能的切分:

  • [3],[4],[2],[1],最大值:4

因此,最大值最小的切分方式是第 1 种,返回 4

解题思路

核心思想

题目要求把数组切成 k 段连续子数组,并让所有段中最大的段和尽可能小。

如果给定一个最大允许段和 limit,可以从左到右贪心分段:当前段能继续放就继续放,放不下就新开一段。这样得到的段数是该 limit 下所需的最少段数。

若最少段数 <= k,说明 limit 足够大,可以尝试更小的最大段和;否则说明 limit 太小,需要增大。

因此可以对答案做二分查找。

算法步骤

  1. 答案下界为 max(nums),因为任何一段至少要容纳一个资源包。
  2. 答案上界为 sum(nums),表示所有资源包分给一个营地。
  3. 二分枚举最大段和 mid
  4. 使用贪心统计在每段和不超过 mid 时,至少需要多少段。
  5. 如果段数 <= k,说明可行,缩小右边界;否则增大左边界。
  6. 二分结束后,left 即为最小可能的最大段和。

复杂度分析

设数组长度为 n,所有资源包总和为 S

  • 时间复杂度:O(n log S)
  • 空间复杂度:`O
THE END