2019应届毕业生,网易算法工程师笔试题第一题

第二题

2019应届毕业生,网易算法工程师笔试题第二题

题目描述

小易觉得高数课太无聊了,决定睡觉,不过他对课上的一些内容挺感兴趣的,所以希望你在老师讲到有趣的部分的时候叫醒他一下。 你知道了小易对一堂课每分钟知识点的感兴趣程度,并以分数量化,以及他在这堂课上每分钟是否会睡着,你可以叫醒他一次,这会使他在接下来的k分钟内保持清醒。 你需要选择一种方案最大化小易这堂课听的知识点分值。

输入描述:

第一行n,k(1<=n,k<=10^5),表示这堂课持续多少分钟,以及叫醒小易一次使他能够保持清醒的时间。 第二行n个数,a1,a2,...,an(1<=ai<=10^4)表示小易对每分钟知识点的感兴趣评分。 第三行n个数,t1,t2,...,tn表示每分钟小易是否清醒,1表示清醒。

输出描述:

小易这堂课听到的知识点的最大兴趣值。

输入例子1:

6 3
1 3 5 2 5 4
1 1 0 1 0 0

输出例子1:

16

参考代码:

import sys
if __name__ == "__main__":
    while True:
        line1 = sys.stdin.readline().strip()
        if line1 == '':
            break
        line2 = sys.stdin.readline().strip()
        if line2 == '':
            break
        line3 = sys.stdin.readline().strip()
        if line3 == '':
            break
        line1 = [int(i) for i in line1.split()]
        line2 = [int(i) for i in line2.split()]
        line3 = [int(i) for i in line3.split()]
        k = line3
        total = []
        for i in range(line1[0]):
            sum = 0
            line3 = [_ for _ in k]
            if i + line1[1] <= line1[0]:
                line3[i:i+line1[1]] = [1] * line1[1]
            else:
                line3[i:] = [1] * (line1[0] - i)
            for j in range(line1[0]):
                sum += (line2[j] * line3[j])
            total.append(sum)
        print(max(total))

猜你喜欢

转载自blog.csdn.net/qq_15969343/article/details/81603513