AT2412 最大の和

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

发布了43 篇原创文章 · 获赞 23 · 访问量 2525

猜你喜欢

转载自blog.csdn.net/qq_39053800/article/details/104402982