算法98---瞌睡(网易笔试)

思路:

"""
思路:从左到右遍历,比较k长度内睡着0状态对应兴趣值的和,即叫醒一下提升的兴趣值。
    总值分为两部分:醒着的固定值 + 睡着的提升值的最大值
"""

代码:

n,k =list(map(int, input().split()))
values =list(map(int, input().split()))
awakes =list(map(int, input().split()))
#n,k = [6,3]
#values = [1, 3, 5, 2, 5, 4]
#awakes = [1, 1, 0, 1, 0, 0]

base_value = 0
for i in range(n):
    if awakes[i] == 1:
        base_value += values[i]
        values[i] = 0
max_value = 0
for i in range(n):
    if awakes[i] == 0:
        max_value = max(sum(values[i:min(k+i,n)]) , max_value)
        # 加了下面的break语句,才使这个代码时间上终于达标
      # 扫描到距结尾不足k距离范围内的第一个睡着状态即可,后面的肯定不如这个的提升值大,没必要再跑,可提前结束
if i > n - k + 1:
            break
print(base_value + max_value)
原文地址:https://www.cnblogs.com/Lee-yl/p/11294519.html