华为OD机试双机位C卷 - 水库溃坝填补 (Python & JAVA & C++ & JS & GO)

31 阅读2分钟

水库溃坝填补

2025华为OD机试双机位C卷 - 华为OD上机考试双机位C卷 200分题型

华为OD机试双机位C卷真题目录点击查看: 华为OD机试真题题库目录|机考题库 + 算法考点详解

题目描述

一座水库在连续多日雨水的冲击下,发生了溃坝事故,解放军赶到现场救灾。其中,水坝两侧坝岩是坚固且高度相等,坝口用宽度为1的柱子的高度图表示,即一个非负整数数组-坝口数组。例如[7,3,0,0,7],其两侧坝岩高度是7,坝口数组则为[3,0,0],坝口面积为(7-4) + (7 - 0) + (7 - 0) = 18个单位。解放军手上有一批宽度为1,高度不一的木材,用一个非负整数数组- 木材数组表示,例如[4,7,4,3,3,5]可作为填补坝口的材料。解放军在指定溃口和填补木材以及工具约束情况下,使用最优填补策略让溃口面积变为最小,例如[4,7,5],经填补木材后,原溃口[3,0,0]变为[7,7,5],溃口面积(7-7) + (7 - 7)+(7-5)=2个单位,为最小面积,则输出为填补木材的总高度: 4 + 7 + 5 = 16.

注意:

由于现场工具缺乏,每个宽度为1的溃口只能填补1根木材,每根木材只能整体填补,无法锯断。填补方案优先考虑将溃口填补到最小,若溃口填补效果一样,即溃口填补效果一样,即溃口面积为最小,则选择耗材最小的方案。

溃口数组长度m和木材数组长度n均为 > 0且<=100,坝岩高度k和木材高度均为>0且<=15;

坝口数组规定第1个高度和最后一个高度是坝岩的高度-描定高度,两者高度相等,绝对不会溃坝、无需填补;

溃口可能会存在多个;

输入描述

输入第一行 为坝口数组长度

第二行为坝口数组

第三行为木材数组长度

第四行为木材数组

输出描述

填补溃口耗费的木材的总高度

用例1

输入

3
8,0,8
2
7,6

输出

7

用例2

输入

5
10,3,0,2,10
6
4,8,6,4,5,6

输出

20

用例3

输入

5
10,3,0,2,10
7
4,13,6,12,5,8,10

输出

30

题解

华为OD机试双机位C卷 - 水库溃坝填补 , C++、Java、Python、JavaScript、Go实现源码和详细实现思路解析,点击跳转查看