2019应届毕业生,网易算法工程师笔试题第一题
程序员文章站
2024-02-26 23:19:58
...
第二题
题目描述
小易觉得高数课太无聊了,决定睡觉,不过他对课上的一些内容挺感兴趣的,所以希望你在老师讲到有趣的部分的时候叫醒他一下。 你知道了小易对一堂课每分钟知识点的感兴趣程度,并以分数量化,以及他在这堂课上每分钟是否会睡着,你可以叫醒他一次,这会使他在接下来的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))