AlgoMooc
你已开通华为OD训练营权益,还差最后一步——完成入营激活(兑换课程 + 加飞书 + 登记服务群),即可解锁全部课程与专属服务。去激活 →
← 返回题库

K0077. 节点关闭就近分配

困难通过率 90% · 提交 10 · 通过 9
动态规划前缀和枚举贪心2508

小慕正在规划一条东西走向的“星辰走廊”,走廊上分布着若干个项目节点,每个节点上有一定数量的团队成员,人数记录在数组 `mages` 中。为了方便团队快速跨节点协作,小慕计划在部分节点上设置协作中心。 然而,由于预算有限,小慕必须关闭 `banNum` 个节点的协作中心。这些被关闭的节点上的团队成员,需要前往的、仍然开放的协作中心,通过步行完成转移。 请你帮助小慕规划协作中心的分布,使得所有团队成员最少,并输出这个最小的总数。

提示:带虚线的词点一下有通俗解释。

输入描述

* 第一行输入一个整数 `n`,表示聚集点的数量,满足 `1 <= n <= 100`。 * 第二行输入 `n` 个整数,`mages[i]` 表示第 `i` 个聚集点的冒险者人数,满足 `0 <= mages[i] <= 10^5`。 * 第三行输入一个整数 `banNum`,表示需要关闭传送阵的聚集点数量,满足 `0 <= banNum <= min(6, n - 1)`。

输出描述

* 输出一个整数,表示**最少的步行区间总数**。

示例

示例 1

输入

5
12 7 15 4 3
2

输出

10

说明:关闭下标为 `3` 和 `4` 的传送阵: * 下标 3 的冒险者:步行 `1` 个区间到下标 2,贡献 `4×1 = 4`; * 下标 4 的冒险者:步行 `2` 个区间到下标 2,贡献 `3×2 = 6`; * 总计 `4 + 6 = 10`

示例 2

输入

7
5 4 5 4 6 7 9
3

输出

14

说明:一种可行的最优方案:关闭下标为 `0`、`2`、`3` 的传送阵: * 下标 0:步行 `1` 个区间,贡献 `5×1 = 5`; * 下标 2:步行 `1` 个区间,贡献 `5×1 = 5`; * 下标 3:步行 `1` 个区间,贡献 `4×1 = 4`; * 合计 `5 + 5 + 4 = 14`。

时间限制 1000 ms · 内存限制 128 MB

看不懂题目?点开图解
魔法传送阵布局示例(n=5, banNum=2) 0 12人 1 7人 2 15人 (保留) 3 4人 4 3人 步行1区间 步行2区间 关闭下标3和4的传送阵,冒险者步行到最近保留点(下标2) 总步行区间数 = 4×1 + 3×2 = 10
写完代码点「提交」,将对全部测试用例判题。

向老师提问

针对「节点关闭就近分配」把疑问、代码和报错填清楚,老师收到后能更快、更准地回复你。