求不重叠区间总和最大值

例题链接:1051-习题-数学考试_2021秋季算法入门班第一章习题:模拟、枚举、贪心

来源:牛客网

时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒

空间限制:C/C++/Rust/Pascal 32 M,其他语言64 M

64bit IO Format: %lld

题目描述

今天qwb要参加一个数学考试,这套试卷一共有n道题,每道题qwb能获得的分数为ai,qwb并不打算把这些题全做完,

他想选总共2k道题来做,并且期望他能获得的分数尽可能的大,他准备选2个不连续的长度为k的区间,

即[L,L+1,L+2,....,L+k-1],[R,R+1,R+2,...,R+k-1](R >= L+k)。

输入描述:

复制代码
第一行一个整数T(T<=10),代表有T组数据
接下来一行两个整数n,k,(2<=n<=200,000),(1<=k,2k <= n)
接下来一行n个整数a1,a2,...,an,(-100,000<=ai<=100,000)

输出描述:

复制代码
输出一个整数,qwb能获得的最大分数

示例1

输入

复制2 6 3 1 1 1 1 1 1 8 2 -1 0 2 -1 -1 2 3 -1

复制代码
2
6 3
1 1 1 1 1 1
8 2
-1 0 2 -1 -1 2 3 -1

输出

复制6 7

复制代码
6
7
复制代码
#include<bits/stdc++.h>
using namespace std;
#define int long long
void solve()
{
	int n, k;
	cin >> n >> k;
	vector<int> a(n+1);
	for (int i = 1; i <= n; i++)
	{
		cin >> a[i];
		a[i]+=a[i-1];
	}
	int l=-1e18, r=-1e18;
	for (int i = k; i <= n - k; i++)
	{
		l = max(l, a[i] - a[i - k]);
		r = max(r, l+a[i+k]-a[i]);
	}
	cout << r << endl;
}
signed main()
{
	int t;
	cin>>t;
	while (t--)
	{
		solve();
	}
	return 0;
}

代码:其中找这两个最大值只需要这样就好,会自动更新。

复制代码
for (int i = k; i <= n - k; i++)
	{
		l = max(l, a[i] - a[i - k]);
		r = max(r, l+a[i+k]-a[i]);
	}
相关推荐
灰灰勇闯IT1 小时前
ops-reduce:ReduceMax 与 ReduceMean 的并行优化
算法
水木流年追梦1 小时前
大模型入门-Reward 奖励模型训练
开发语言·python·算法·leetcode·正则表达式
沙威玛_LHE1 小时前
P13376题解
算法
DFT计算杂谈2 小时前
KPROJ编译教程
java·前端·python·算法·conda
重生之我是Java开发战士2 小时前
【笔试强训】Week5:空调遥控, kotor和气球,走迷宫,主持人调度II,体操队形,二叉树的最大路径和,排序子序列,消减整数
java·算法·动态规划
吃好睡好便好3 小时前
用if…end…语句计算分段函数
开发语言·人工智能·学习·算法·matlab
灰灰勇闯IT3 小时前
ops-memory:CANN Runtime 的 Tensor 内存管理
算法
叶子Talk3 小时前
OpenAI破解80年数学猜想,AI首次做出原创证明
人工智能·数学·算法·机器学习·ai·openai·ai推理
MhZhou04124 小时前
1.11M参数小模型实现脑瘤分割 CVPR 2026 Findings 开源
算法·计算机视觉·3d·空间计算
有为少年4 小时前
Welford算法 | 从单一到批次
大数据·人工智能·深度学习·神经网络·算法·机器学习