【二分答案 dp】 Bare Minimum Difference

在这里插入图片描述


分析:

首先我们能够得知这个优秀值具有单调性:
如果一个优秀值 x 1 x1 x1能够满足题目要求,那么任何 x ( x > x 1 ) x(x>x1) x(x>x1)显然都能符合要求

基于这一特性,我们想到二分答案
直接二分这个答案好像难以维护。
怎么办呢?

我们观察区间的个数
我们注意到对于整个序列来说,子区间的个数最多只有 n 2 n^2 n2个,也就是说对于这道题而言有效的数值只有 n 2 n^2 n2个。

进一步分析我们发现这道题我们只需要关注最小值和最大值,所以每个区间的和只要介于最小值和最大值之间就可以

于是我们达到一下的二分思路:
n 2 n^2 n2枚举所有可能得最小值,而后二分我们的答案,得出我们的最大值
这样我们就得到了合法区间的范围

那么如何check呢?

如果从分割区间的方式出发,这道题很难进行维护,因为分割的方式多样,每一次不同的分割都会产生不同的结果

但是我们并不需要求出具体的分割方式,我们只需要去检验当前分割方式是否可行即可。
于是我们设 f [ i ] f[i] f[i]表示到第i个数为止是否能分割出合法的区间

考虑如何转移:
f [ i ] ∣ = ( f [ j ] & & l < = f [ i ] − f [ j ] & & f [ i ] − f [ j ] < = r ) f[i]|=(f[j]\&\&l<=f[i]-f[j]\&\&f[i]-f[j]<=r) f[i]=(f[j]&&l<=f[i]f[j]&&f[i]f[j]<=r)

最后返回 f [ n ] f[n] f[n]即可

同时注意到分割区间至少分分割出两个区间,所以我们只需要把一个区间的可能性判掉就行了


#include<bits/stdc++.h>
using namespace std;#define int long longconst int N = 101;
int n;
int a[N],s[N];
int b[N*N],len;
bool f[N];bool Check(int l,int x){int r = l+x;for (int i = 1; i <= n; i++) f[i] = 0;for (int i = 1; i <= n; i++) if (l <= s[i] && s[i] <= r) f[i] = 1;f[n] = 0;int st = n;for (int i = 1; i <= n; i++)if (f[i]) {st = i;break;}if (st == n) return 0;for (int i = st+1; i <= n; i++)for (int j = st; j < i; j++){if (f[i] == 1) break;f[i] = (f[j] && l <= s[i]-s[j] && s[i]-s[j] <= r);}if (f[n]) return 1;return 0;
}signed main(){scanf("%lld",&n);for (int i = 1; i <= n; i++)scanf("%lld",&a[i]) , s[i] = s[i-1] + a[i];for (int i = 1; i <= n; i++)for (int j = i; j <= n ;j++){if (i == 1 && j == n) continue;b[++len] = s[j]-s[i-1];}sort(b+1,b+len+1);int l = 0 , r = 0;for (int i = 1; i <= n; i++) r+=a[i];while (l+1<r){int Mid = l+r>>1; bool ff = 0;for (int minn = 1; minn <= len; minn++)if (Check(b[minn],Mid)){ff = 1;break;}if (ff) r = Mid; else l = Mid;}bool ff = 0;for (int minn = 1; minn <= len; minn++)if (Check(b[minn],l)){ff = 1;break;}if (ff) cout<<l;else cout<<r;return 0;
}

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

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

相关文章

Php“梦寻”淘宝天猫商品详情数据接口,淘宝商品详情数据API接口,淘宝API接口申请指南(含代码示例)

淘宝商品详情接口 API 是开放平台提供的一种 API 接口&#xff0c;它可以帮助开发者获取淘宝商品的详细信息&#xff0c;包括商品的标题、描述、图片等信息。在淘宝电商平台的开发中&#xff0c;淘宝详情接口 API 是非常常用的 API&#xff0c;因此本文将详细介绍淘宝详情接口 …

【笔试强训选择题】Day37.习题(错题)解析

作者简介&#xff1a;大家好&#xff0c;我是未央&#xff1b; 博客首页&#xff1a;未央.303 系列专栏&#xff1a;笔试强训选择题 每日一句&#xff1a;人的一生&#xff0c;可以有所作为的时机只有一次&#xff0c;那就是现在&#xff01;&#xff01; 文章目录 前言一、Day…

macbookpro怎么删除软件没有鼠标

macbookpro怎么删除软件没有鼠标,macbookpro触摸板可以替代鼠标进行操作。左右键功能与鼠标相同&#xff0c;可用于执行删除操作。此外&#xff0c;还可以利用键盘上的Delete键来删除选中的文件。 删除软件方法 方法1、打开应用程序&#xff0c;键盘按住control&#xff0c;加点…

Android Automotive编译

系统准备 安装系统 准备一台安装Ubuntu系统的机器&#xff08;windows系统的机器可以通过WSL安装ubuntu系统&#xff09; 安装docker 本文使用docker进行编译&#xff0c;因此提前安装docker。参考网络链接安装docker并设置为不使用sudo进行docker操作。 参考链接&#xff…

E5071C是德科技网络分析仪

描述 E5071C网络分析仪提供同类产品中最高的RF性能和最快的速度&#xff0c;具有宽频率范围和多功能。E5071C是制造和R&D工程师评估频率范围高达20 GHz的RF元件和电路的理想解决方案。特点: 宽动态范围:测试端口的动态范围> 123 dB(典型值)快速测量速度:41毫秒全2端口…

什么是IIFE(Immediately Invoked Function Expression)?它有什么作用?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐IIFE 的基本语法⭐IIFE 的主要作用⭐如何使用 IIFE 来创建私有变量和模块封装⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅…

界面控件DevExpress WinForms工具栏菜单组件,模拟流行办公软件!

DevExpress WinForms的工具栏和菜单组件灵感来自于Microsoft Office&#xff0c;并针对WinForms开发人员进行了优化&#xff0c;可以帮助开发者快速模拟当下流行的办公软件应用程序。 DevExpress WinForms有180组件和UI库&#xff0c;能为Windows Forms平台创建具有影响力的业…

Matlab(画图进阶)

目录 大纲 1.特殊的Plots 1.1 loglog(双对数刻度图) ​1.3 plotyy(创建具有两个y轴的图形) 1.4yyaxis(创建具有两个y轴的图) 1.5 bar 3D条形图(bar3) 1.6 pie(饼图) 3D饼图 1.7 polar 2.Stairs And Ste阶梯图 3.Boxplot 箱型图和Error Bar误差条形图 3.1 boxplot 3.2 …

ASP.NET Core 中的 MVC架构

MVC 架构 MVC架构把 App 按照逻辑分成三层&#xff1a; Controllers&#xff0c;接收 http request&#xff0c;配合 model&#xff0c;通过http response 返回 view&#xff0c;尽量不做别的事Models, 负责业务逻辑&#xff0c;App 的状态&#xff0c;以及数据处理Views&…

借助AI分析哥斯拉木马原理与Tomcat回显链路挖掘

前言 本次分析使用了ChatGPT进行辅助分析&#xff0c;大大提升了工作效率&#xff0c;很快就分析出木马的工作流程和构造出利用方式。 分析 首先对该木马进行格式化,以增强代码的可读性。得到如下代码 <jsp:root xmlns:jsp"http://java.sun.com/JSP/Page" vers…

如何解决前端传递数据给后端时精度丢失问题

解决精度丢失 有时候我们在进行修改操作时&#xff0c;发现修改既不报错也不生效。我们进行排查后发现服务器端将数据返回给前端时没有出错&#xff0c;但是前端js将数据进行处理时却出错了&#xff0c;因为id是Long类型的&#xff0c;而js在处理后端返回给前端的Long类型数据…

职责链设计模式

职责链模式又叫命令链、CoR、Chain of Command、Chain of Responsibility。 该模式允许你将请求沿着处理者链进行发送&#xff0c;使多个对象都可以处理请求&#xff0c;每个对象有权决定处理或传递给下个节点。 客户端&#xff1a;用来定义职责链条。 处理者&#xff1a;声明…

OpenCV 07(图像滤波器)

一、卷积 什么是图片卷积? 图像卷积就是卷积核在图像上按行滑动遍历像素时不断的相乘求和的过程 步长 步长就是卷积核在图像上移动的步幅. 上面例子中卷积核每次移动一个像素步长的结果, 如果将这个步长修改为2, 结果会如何? 为了充分扫描图片, 步长一般设为1. padding …

更换 yum 阿里源 - 手把手教你怎么配置,在也不需要求别人了 - 看懂一个就相当于看懂了其他的linux系统

更换阿里源 我的是centos8 当然 centos7 也可以换 后面有更详细的怎么配 &#xff0c;再也不用求别人怎么弄了 最直接的方式 直接复制 执行 centos7 curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo或者 wget -O /etc/yum.repos.…

fastadmin 框架中图片点击放大

fastadmin的原生图片预览,重新打开一个窗口太麻烦&#xff0c;使用layui做一个弹窗式的图片预览 效果如下&#xff1a; 点击放大&#xff1a; 第一步&#xff1a;在backend-init.js文件中添加如下代码&#xff1a; $(body).on(click, [data-tips-image], function () {var…

Java进行多线程编程?(lambda表达式~)

本文标题&#xff1a;Java进行多线程编程&#xff1f;那么&#xff0c;Java为啥不学学如何进程多进程编程呢&#xff1f;&#xff1f;原因在于&#xff1a;Java圈子中不提倡多进程编程~~ 接下来&#xff0c;我们来写一个最为基础/入门的HelloWord程序来感受如何进行多线程~~ J…

leetcode:58. 最后一个单词的长度

题目&#xff1a; 函数原型&#xff1a; int lengthOfLastWord(char * s) 解析&#xff1a; 求最后一个单词的长度&#xff0c;我们有两种思路 第一种思路&#xff1a; 逆向求&#xff0c;先设置一个字符串下标index&#xff0c;定位到最后一个单词的最后一个字符。再一个设置长…

微服务-kubernetes安装

文章目录 一、前言二、kubernetes2.1、Kubernetes (K8S) 是什么2.1.1、主要特性&#xff1a;2.2.2、传统部署方式&#xff1a;2.2.3、虚拟机部署2.2.4容器部署2.2.5什么时候需要 Kubernetes2.2.6、Kubernetes 集群架构 三、kubernetes安装3.1、主节点需要组件3.1.1、设置对应主…

Mybatis传递实体对象只能直接获取,不能使用对象.属性方式获取

mybatis的自动识别参数功能很强大&#xff0c;pojo实体类可以直接写进mapper接口里面&#xff0c;不需要在mapper.xml文件中添加paramType,但是加了可以提高mybatis的效率 不加Param注解&#xff0c;取值的时候直接写属性 //这里是单参数&#xff0c;可以不加param&#xff01…

Node.js 操作百度网盘实现文件上传(小文件上传,大文件分片上传)

Node.js 操作百度网盘实现文件上传&#xff08;小文件上传&#xff0c;大文件分片上传&#xff09; 前提准备&#xff1a;获取百度网盘的授权码 https://pan.baidu.com/union/doc/al0rwqzzl const fs require(fs); const crypto require(crypto); const path require(pat…