https://www.luogu.com.cn/problem/AT2412
题目描述
输入格式
无
输出格式
无
题意翻译
题意
读入n个整数的数列a1,a2,…,an和正整数k(1<=k<=n),请输出连续排列的k个整数的和的最大值
输入
第一行是正整数n(1<=n<=100000)和正整数k(1<=k<=n) 第二行以后的第1+i(1<=i<=n)至最后一行为数列
输出
仅一行,仅包括最大值。
样例输入
5 3 2 5 -4 10 3
样例输出
11
由 @UMR 提供翻译
输入输出样例
无
本题的算法是前缀和、递归、线段树;考虑到本人的水平,所以我采用前缀和来实现。
前缀和方法一:
#include<bits/stdc++.h>
using namespace std;
#define N 100005
int a[N];
long long s = 0, ans = -1000000000;
int main(){
int n, k;
cin >> n >> k;
for(int i=1; i<=n; i++)
cin >> a[i];
for(int i=1; i<=n; i++){
if(i <= k){
s += a[i];
}else{
s += a[i];
s -= a[i-k];
}
if(i >= k)//注意==k
ans = max(ans, s);
}
cout << ans << endl;
return 0;
}
前缀和方法二:
#include<bits/stdc++.h>
using namespace std;
#define N 100005
int a[N];
long long s = 0, ss[N], ans = -1000000000;
int main(){
int n, k;
cin >> n >> k;
for(int i=1; i<=n; i++){
cin >> a[i];
ss[i] += ss[i-1] + a[i];
}
for(int i=k; i<=n; i++)
ans = max(ans, ss[i]-ss[i-k]);
cout << ans << endl;
return 0;
}
提醒:本题题目描述不是很清晰,输出需要换行这一点没有再题目中告知,但是没有换行的话,是AC不了的。
给出之前写的一篇前缀和的文章:https://blog.csdn.net/qq_39053800/article/details/104244458