求不重叠区间总和最大值

例题链接: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]);
	}
相关推荐
ZhengEnCi10 小时前
GPT-6 Astra 爆改 Qwen 权重真有那么神吗:权重空间编程 0.016% 参数的真相
算法·架构
罗西的思考10 小时前
【轻量化复刻大模型 / KIMI K3】KDA(Kimi Delta Attention):并行
人工智能·算法·机器学习
夜不会漫长13 小时前
C++:红黑树
数据结构·算法
AI备案指南-满满13 小时前
算法备案审核不通过,一般是什么原因?
java·人工智能·算法·大模型备案·算法备案·大模型登记
Ramble_Naylor13 小时前
Rust深度解读:Send 与 Sync 的本质与线程安全边界
python·算法·rust
秋天的怀念_David14 小时前
算法一千零一夜 · 第二十三夜 电力民生写成的曲线
java·程序人生·算法
不一样的故事12614 小时前
NB/T 47013.8-2015 附录D 吸枪技术
人工智能·经验分享·算法
通问AI14 小时前
用 200 行 Python 给文档库做「上下文完整度」自检:四个可复算的检查项
算法
揽星河..14 小时前
【C语言】扫雷游戏
c语言·算法·游戏
丘山录14 小时前
本地部署 LongCat-2.5,要 7 台机器我只有 4 台
人工智能·算法