求和

求和

题目描述:

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

输入:

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

输出:

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

样例输入:

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

样例输出:

9
24

题解:

一道简单地前缀和。

/**********************************************************
* @Author: 			   Maple
* @Date:   			   2020-02-21 10:02:17
* @Last Modified by:   Maple
* @Last Modified time: 2020-02-21 10:07:59
* @Remark: 
**********************************************************/
#include <bits/stdc++.h>
#define lowbit(x) (x&(-x))
#define CSE(x,y) memset(x,y,sizeof(x))
#define INF 0x3f3f3f3f
#define Abs(x) (x>=0?x:(-x))
#define FAST ios::sync_with_stdio(false);cin.tie(0);
using namespace std;

typedef long long ll;
typedef pair<int,int> pii;
typedef pair<ll , ll> pll;

const int maxn = 1e5+100;
ll n,m,sum[maxn];

int main()
{
	#ifndef ONLINE_JUDGE
	freopen("in.in","r",stdin);
	#endif
	int t;
	cin >> t;
	while(t--){
		cin >> n >> m;
		for(int i = 1;i <= n;i++){
			scanf("%lld",&sum[i]);
			sum[i] += sum[i-1];
		}
		ll ans = 0;
		for(int i = 0;i+m <= n;i++){
			ans = max(sum[i+m] - sum[i],ans);
		}
		cout << ans << endl;
	}
	return 0;
}
原文地址:https://www.cnblogs.com/LeafLove/p/12340379.html