用 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

相关文章


有用资源