华为OD机试真题 新系统 2026-07-01 C++ 实现【收集灵草】

目录

题目

思路

Code


题目

在一个远古修士的洞穴中,探宝者发现了一排共 N 棵灵草,每棵灵草有一个灵力值 A,灵力值可为正、负或零。

为避免灵草被探宝者一扫而空,远古修士设置了禁制,要求探宝者必须选择一段连续的灵草序列带回,且必须满足以下规则:

规则一:选中的连续序列中,灵力值为正的数量不少于 K 棵。

规则二:在满足规则一的前提下,探宝者还可以从选中序列中额外挑选最多 M 棵灵力值为负的灵草丢弃,以提升总收益。

求所有合法选择方案中,能够带走的灵草的灵力值总和的最大值。如果无法满足规则一,输出 -1。

数据范围:

1 <= N <= 10^4

1 <= K <= N

0 <= M <= 5

-10^9 <= A <= 10^9

输入描述

输入格式:

N K M

a1 a2 a3 ... aN

其中:

N 表示灵草数量。

K 表示至少需要选择的正数灵草数量。

M 表示最多可丢弃的负数灵草数量。

a1 a2 ... aN 表示灵草灵力值数组。

输出描述

输出合法选择方案中,带走灵草的最大灵力值总和;如果不存在正灵力值数量不少于 K 的连续序列,输出 -1。

样例 1(按公开题意构造)

输入:

7 2 1