用 Python 编写程序,找出我们能让多少人开心
pythonserver side programmingprogramming更新于 2026/1/5 22:36:17
假设我们有一个列表 customers 和另一个列表 mood,这两个列表的长度相同,我们还有另一个整数 k。现在,每分钟 i,customers[i] 人数来到商店,当 mood[i] = 1 时,表示顾客很开心,当 mood[i] = 0 时,表示顾客很伤心。我们可以将一个大小为 k 的心情子列表设置为 1,最后我们必须找到可以让最多多少人感到开心。
因此,如果输入为客户 = [2, 3, 6, 6, 3] 心情 = [1, 1, 0, 0, 0] k = 2,则输出将为 17,因为如果我们将心情[2]和心情[3]设置为 1,则总心情将为 2 + 3 + 6 + 6 = 17 位客户感到开心。
为了解决这个问题,我们将遵循以下步骤 −
- n := 心情大小
- a := 大小为 (n + 1) 的列表并用 0 填充
- s := 0
- 对于范围为 0 到 n - 1 的 i,执行
- a[i + 1] := a[i]
- 如果 mood[i] 非零,则
- s := s + customers[i]
- 否则,
- a[i + 1] := a[i + 1] + customers[i]
- d := 0
- 对于 k 到 n 范围内的 i,执行
- d := d 和 (a[i] - a[i - k]) 中的最大值
- 返回 s + d
示例
让我们看看下面的实现以便更好地理解 −
def solve(customers, mood, k): n = len(mood) a = [0] * (n + 1) s = 0 for i in range(n): a[i + 1] = a[i] if mood[i]: s += customers[i] else: a[i + 1] += customers[i] d = 0 for i in range(k, n + 1): d = max(d, a[i] - a[i - k]) return s + d customers = [2, 3, 6, 6, 3] mood = [1, 1, 0, 0, 0] k = 2 print(solve(customers, mood, k))
输入
[2, 3, 6, 6, 3], [1, 1, 0, 0, 0], 2
输出
17
相关文章
有用资源
python 参考教程 - 该教程包含有关 python 的更多信息:https://www.cainiaomax.com/python/

