【蓝桥杯每日一练:前缀和】

问题描述

出题人很困,所以不编题面了。
给一个长度为n的序列,你需要求出其中连续m个数的和的最大值是多少。

输入格式

第一行给出一个数字T,表示数组总数 (t<100)
每组数据的第一行有两个数字 n,m  (0 第二行有n个数字ai  (0

输出格式

对于每组数据,输出最大的连续m个数之和。

输入样例


5 2
2 5 4 1 6
8 3
3 5 8 2 1 8 9 7

输出样例

9
24

【提示】

本题应用前缀和的方法,但是实际做的时候用了一种滑窗的思想,能够大幅度减少计算量,减少运算时间。

代码

T=int(input())
d=[]
for t in range(T):
    n,m=map(int,input().split())
    a=str(input())
    b=a.split(' ')
    c = 0
    for x in range(m):
        c = c + int(b[x])
    e=c
    d=c
    for i in range(m,n):
        c=d
        d=c+int(b[i])-int(b[i-m])
        if d>e:
            e=d
        else:
            e=e
    print(e)

你可能感兴趣的:(蓝桥杯,蓝桥杯,职场和发展,动态规划,python,算法)