题目链接:Here

思路:区间求和问题可以想到一个常用算法。前缀和。区间 \([l,r]\) 的和可以用 \(sum_r - sum_l\) 方便求出

由于区间长度 \(k\) 已知,所以我们可以直接选择暴力枚举两个区间的起点然后利用前缀和快速求和。

具体细节如下:

直接从 \(k\) 出发,用 cnt 比较出 \(k\) 之前最大区间和,用 ans 比较出 \(k\) 之后的最大区间和

  • 时间复杂度:\(\mathcal{O}(N)\)

注意点:数据范围较大,注意使用 long long

using ll = long long;
using namespace std;
int main() {
ios_base::sync_with_stdio(false), cin.tie(0);
int _;
for (cin >> _; _--;) {
int n, k;
cin >> n >> k;
vector<ll> a(n + 2);
for (int i = 1; i <= n; ++i) cin >> a[i], a[i] = a[i - 1] + a[i];
ll ans = -1e18, cnt = -1e18;
for (int i = k; i + k <= n; ++i) {
cnt = max(cnt, a[i] - a[i - k]);
ans = max(ans, cnt + a[i + k] - a[i]);
}
cout << ans << "\n";
}
return 0;
}

当然这道题不仅仅是枚举起点一种解法,也可以用线性 DP

在我们预处理完前缀和后,如何获得某个位置之和的最大区间呢?我们可用线性 \(DP\) 求得,设 \(f1_i\) 表示位置 \(i\) 之前的最大区间和,而 \(f2_i\) 表示 \(i\) 之后的最大区间和。

  • \(f1_i = max(f1_{i - 1} , sum_i - sum_{i - k})\)
  • \(f2_i = max(f2_{i + 1},sum_{i + k - 1} - sum_{i - 1})\)
using ll = long long;
using namespace std;
const int N = 2e5 + 10;
ll f1[N], f2[N];
int main() {
ios_base::sync_with_stdio(false), cin.tie(0);
int _;
for (cin >> _; _--;) {
int n, k;
cin >> n >> k;
vector<int> a(n + 1);
vector<ll> sum(n + 1, 0);
for (int i = 1; i <= n; ++i) {
cin >> a[i];
sum[i] = a[i] + sum[i - 1];
}
memset(f1, -127, sizeof f1);
memset(f2, -127, sizeof f2);
for (int i = k; i <= n - k; ++i)
f1[i] = max(sum[i] - sum[i - k], f1[i - 1]);
for (int i = n - k + 1; i >= k + 1; --i)
f2[i] = max(sum[i + k - 1] - sum[i - 1], f2[i + 1]);
ll ans = -1e18; for (int i = k; i <= n - k; ++i)
ans = max(ans, f1[i] + f2[i + 1]);
cout << ans << "\n";
}
return 0;
}

最后是不是感觉代码二是代码一的详细版本?

本质上两个代码是一样的(代码一在空间上更优),这里只是稍微展开来。

【每日一题】3.数学考试 (前缀和,线性DP)的更多相关文章

  1. 【ACM算法竞赛日常训练】DAY2题解与分析【比赛】【数学考试】【简单瞎搞题】

    DAY2共三题: 比赛(概率) 数学考试(前缀和与思维) 简单瞎搞题(dp) 视频讲解:https://www.bilibili.com/video/BV1hP411o7RD/ 作者:Eriktse ...

  2. 【python】Leetcode每日一题-前缀树(Trie)

    [python]Leetcode每日一题-前缀树(Trie) [题目描述] Trie(发音类似 "try")或者说 前缀树 是一种树形数据结构,用于高效地存储和检索字符串数据集中的 ...

  3. NC15553 数学考试

    NC15553 数学考试 题目 题目描述 今天qwb要参加一个数学考试,这套试卷一共有 \(n\) 道题,每道题qwb能获得的分数为 \(a_i\) ,qwb并不打算把这些题全做完, 他想选总共 \( ...

  4. 2018年长沙理工大学第十三届程序设计竞赛 H数学考试

    链接:https://www.nowcoder.com/acm/contest/96/H来源:牛客网 数学考试 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言6 ...

  5. 【剑指Offer】简单部分每日五题 - Day 1

    今天开始更新leetcode上<剑指Offer>的题解,先从简单难度开始.预计按下列顺序更新: 简单难度:每日5题 中等难度:每日3题 困难难度:每日1题 17 - 打印从1到最大的n位数 ...

  6. 【JavaScript】Leetcode每日一题-平方数之和

    [JavaScript]Leetcode每日一题-平方数之和 [题目描述] 给定一个非负整数 c ,你要判断是否存在两个整数 a 和 b,使得 a2 + b2 = c . 示例1: 输入:c = 5 ...

  7. 【JavaScript】Leetcode每日一题-矩形区域不超过K的最大值和

    [JavaScript]Leetcode每日一题-矩形区域不超过K的最大值和 [题目描述] 给你一个 m x n 的矩阵 matrix 和一个整数 k ,找出并返回矩阵内部矩形区域的不超过 k 的最大 ...

  8. 【python】Leetcode每日一题-笨阶乘

    [python]Leetcode每日一题-笨阶乘 [题目描述] 通常,正整数 n 的阶乘是所有小于或等于 n 的正整数的乘积.例如,factorial(10) = 10 * 9 * 8 * 7 * 6 ...

  9. Java实习生常规技术面试题每日十题Java基础(八)

    目录 1.解释内存中的栈(stack).堆(heap)和静态区(static area)的用法. 2.怎样将GB2312编码的字符串转换为ISO-8859-1编码的字符串? 3.运行时异常与受检异常有 ...

  10. 【Java每日一题】20170106

    20170105问题解析请点击今日问题下方的"[Java每日一题]20170106"查看(问题解析在公众号首发,公众号ID:weknow619) package Jan2017; ...

随机推荐

  1. 3款国产办公软件,不仅好用,还支持linux国产操作系统

    当提到国产办公软件并支持Linux国产操作系统时,以下是三款备受好评的软件: 1. WPS Office(金山办公套件) WPS Office是中国知名的办公软件套件,也是一款跨平台的应用程序.它包含 ...

  2. raft算法的自我理解

    1.raft算法是什么? 答:共识算法 2.raft算法有什么用? 答:维持不同机器的强一致性 3.raft算法通过什么方式来维持不同机器的强一致性? 答:传递log日志 ,按照官方的说法日志里面包含 ...

  3. [AGC030D] Inversion Sum

    Problem Statement You are given an integer sequence of length $N$: $A_1,A_2,...,A_N$. Let us perform ...

  4. Cocos Creator性能调优

    一. 为什么要做性能优化 性能:是程序的一种优秀的能力.唤醒快.运行持久.稳定 这种能力正在游戏上能让你的用户感觉很爽,特征表现为加载快.运行流畅.不卡顿. 所以,性能优化的终极目标是,让你的用户体验 ...

  5. 为什么说数字孪生和GIS高度互补?它们各自从对方那里获得了什么?

    在数字化时代,数字孪生和GIS作为两项重要技术,它们的融合正日益受到人们的关注和认可.数字孪生是将实体世界与数字世界紧密结合的技术,可以创建实时的虚拟副本,对物理系统进行模拟.优化和预测.而GIS则是 ...

  6. Weblogic获取端口IP

    Weblogic获取端口IP 获取端口IP只为了判断哪个节点 调用 private WebMBeanServer server=new WebMBeanServer(); synlog.info(&q ...

  7. CSS3学习笔记引言

    开始我们要来介绍css: CSS(全称为Cascading Style Sheets)是一种用于描述HTML.XML等文档样式的样式语言,它能够定义元素的显示方式,如字体.颜色.布局等. CSS可以把 ...

  8. C# 查找PDF页面指定区域中的文本并替换和高亮

    对PDF文档中的内容进行查找时,可针对文档全篇内容获取查找结果,也可在PDF指定页面中的特定范围内(矩形框区域)进行查找,对获取的查找结果可执行文本高亮或替换等操作,本文将对此作相关介绍(附VB.NE ...

  9. KubeFlow-Pipeline及Argo实现原理速析

    Argo是一个开源原生容器工作流引擎用于在Kubernetes上开发和运行应用程序.Argo Workflow流程引擎,可以编排容器流程来执行业务逻辑,在20年4月8日进入CNCF孵化器组. 而Kub ...

  10. 伯克利:serverless是下一代计算范式

    摘要:Serverless技术正是云厂商的基于规模经济的一个选择. 引子 刚过去的HC2020,华为面向多样化算力的时代,发布了DC分布式计算的三个开发套件,其中一个是元戎组件.元戎是基于函数计算的分 ...