牛客周赛 Round 86——F小苯的线性dp

news/2025/4/1 19:02:57/文章来源:https://www.cnblogs.com/PZnwbh/p/18800673

题目

小苯的线性dp

题解

通过观察我们可以发现,为了最大化极差,我们需要:
最大值尽可能大:通过合并相邻元素,可以生成更大的数。
最小值尽可能小:通过不合并最小值,或者让最小值单独存在。
观察到:
执行k次合并后,数组长度为n−k。
最大极差可以通过以下方式实现:
最大值是某个连续子数组的和(通过合并相邻元素)。
最小值是某个单独的元素(不合并它)。
因此,对于每个k,我们需要:
找到一个长度为n−k的分割,其中至少一个段是一个单独的元素(最小值),另一个段是尽可能大的合并和(最大值)。
如果把a[i]作为最小值,我们可以找到a[i]前面的长度为k+1区间大小的最值和后面长度为k+1区间大小的最值,两者取大者减去a[i],就是以a[i]作为最小值的极差。
我们代码中的k表示的是合并完成后的长度而不是操作k次,这点需要注意,然后我们上面这个方面的前提条件是合并完最少也要三个数,但是我们如果执行了n-2次操作就会变成只有两个数,那就不能这么判断,需要单独拿出来判断,最后n-1次的结果固定为0。
题目中枚举的k和题目中说明的操作k次是k(代码) = k(题目) + 1的关系。

参考代码

#include<iostream>
#include<vector>
using namespace std;
#define int long long
void solve(){int n;cin >> n;vector<int> a(n + 1),s(n + 1);for(int i = 1; i <= n; i ++){cin >> a[i];s[i] = s[i - 1] + a[i];}for(int k = 1; k <= n - 2; k ++){vector<int> pre(n + 1),nxt(n + 2);for(int i = 1; i <= n; i ++){pre[i] = max(pre[i - 1], s[i] - s[max(0LL, i - k)]);}for(int i = n; i >= 1; i --){nxt[i] = max(nxt[i + 1], s[min(n, i + k - 1)] - s[i - 1]);}int res = 0;for(int i = 1;i <= n; i ++){res = max(res, max(pre[i - 1], nxt[i + 1]) - a[i]);}cout << res << " ";}   cout << max(s[n] - a[1] - a[1], s[n - 1] - a[n]) << " 0" << endl;
}
signed main(){int _ = 1;cin >> _;while(_ --){solve();} return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/908143.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网站被劫持且快照被黑,如何快速修复与解决?

一、问题现象与原因分析现象描述从百度点击进入网站时,跳转到非法页面。 直接输入网址访问则正常,未发生跳转。 百度快照显示非法内容,site查看网站收录出现大量非法关键词。 百度网址安全中心提示“该页面可能存在钓鱼欺诈信息”。原因分析首页代码被篡改:黑客在首页文件中…

halcon 深度学习教程(三) 目标检测之水果分类

原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/18777081深度学习教程目录如下,还在继续更新完善中 深度学习系列教程目录有兴趣可以多看其他的halcon教程halcon 学习教程目录本篇主要讲一下halcon的目标检测案例,都是halcon22版本以后才可以用的哈,没有的话…

相或为K

贪心思想:通过排除非法数,确保或运算不会引入多余的1位。 代码展示: #include <bits/stdc++.h> using namespace std; //对于k来说 如果k的第i位为0,则ai的第i为也为0(贪心思想 最优解) //利用二进制进行拆位,用>>和&的方式进行 int t,n,k;bool check(int…

WebKit Inside: 渲染树

iOS WebKit 渲染树的构建过程经过CSS的匹配,就要进入渲染树的构建。 渲染树也叫RenderObject树,因为渲染树上每一个节点,都是RenderObject的子类。 首先来看一下RenderObject的继承类图。 1 RenderObject 继承类图RenderText表示要渲染的文本。 RenderButton表示要渲染的按钮…

使用Chat2DB操作WINCC的Microsoft SQL Server数据库

配置WINCC软件自动安装的Microsoft SQL Server 数据库,使之可以被外部程序访问2025年3月30日 11:59 周日 记录 WINCC软件安装时,会同时安装对应版本的Microsoft SQL Server 数据库。 该记录主要是配置WINCC软件自动安装的Microsoft SQL Server 数据库,使之可以被外部程序访问…

GO单元测试-工具

本文介绍如何在GO语言中编写单元测试,主要内容包括:标准库中的testing包,第三方框架testify和mockery工具,monkey patching框架gomonkey,以及如何查看覆盖率。GO单元测试 摘要 本文介绍如何在GO语言中编写单元测试,主要内容包括:标准库中的testing包,第三方框架testify…

36.7K star!拖拽构建AI流程,这个开源LLM应用框架绝了!

`Flowise` 是一款革命性的低代码LLM应用构建工具,开发者通过可视化拖拽界面,就能快速搭建基于大语言模型的智能工作流。该项目在GitHub上线不到1年就斩获**36.7K星标**,被开发者誉为"AI时代的乐高积木"。36.7K star!拖拽构建AI流程,这个开源LLM应用框架绝了! 只…

Tandis 解法集()

1-x 的关卡都比较简单。 2-1: 现在我们有一个常驻的旋转操作。 和某个 1-x 的关卡一样处理即可。 2-2: 开始起飞了。 操作类似于一个极坐标变换:把方块平放即可得到圆。 2-3如果要通过这种变换得到一个中心对称图形,那左侧放的一定也是长度恰好为 8 的倒下的柱体。 而柱体的切…

Java24发布,精心总结

Java 24作为2025年3月发布的最新版本,延续了Java平台每半年发布一次的节奏,带来了24项重要改进。本文将按照核心改进领域分类,详细解析每个特性的技术原理和实际价值,帮助开发者全面了解这一版本的能力边界和应用场景。 不过Java24是自Java 21 以来的第三个非长期支持版本,…

一台电脑上快速切换git账号

如果你的一台笔记本,既要开发公司的项目,同时你又要参与github,或者是gitee上的开源项目。你就需要使用不同的账号来提交代码。如何快速、高效的切换和管理不同的git账号? 本人使用的就是这种方式,只要配置好,会自动切换的。本文来自博客园,作者:Eular,转载请注明原文…

从 0 到 1 打造代码扫描工具:实战指南与技术解析

在团队协作开发的场景中,代码规范的重要性不言而喻。当团队规模逐渐扩大,如何确保每个人提交的代码都符合规范,比如不能 import *、代码嵌套不能超3层,代码包层级依赖结构约定、 不能修改核心文件等,成为了一个亟待解决的问题。今天,咱们就来聊聊如何开发一个代码扫描工具…

深入解析Java Web开发中的异常处理机制:策略、实践与案例分析

一、引言 1. Java Web开发概述 Java Web开发是基于Java语言构建网络应用程序的过程,它通过Java Servlet、JSP(JavaServer Pages)、Spring MVC等技术,实现动态网页的生成和交互。Java Web应用广泛应用于企业级系统、电子商务平台、在线教育等领域。在这些应用中,用户通过浏…