码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2019-08-03 14:49:28      阅读:149      评论:0      收藏:0      [点我收藏+]

标签:width   思路   info   技术   笔试   comm   结束   base   提升   

技术图片

技术图片

 

思路:

"""
思路:从左到右遍历,比较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)

 

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

标签:width   思路   info   技术   笔试   comm   结束   base   提升   

原文地址:https://www.cnblogs.com/Lee-yl/p/11294519.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!