【二分答案 dp】 Bare Minimum Difference

news2024/11/24 10:04:18

在这里插入图片描述


分析:

首先我们能够得知这个优秀值具有单调性:
如果一个优秀值 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 long

const 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.coloradmin.cn/o/989498.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PdM和PHM有何区别?

在工业领域&#xff0c;PdM&#xff08;Predictive Maintenance&#xff0c;预测性维护&#xff09;和PHM&#xff08;Prognostics and Health Management&#xff0c;预测与健康管理&#xff09;是两个关键的术语。它们都涉及设备维护和故障预测&#xff0c;但在方法和应用方面…

洛谷 LGR SCP-J 2023 c++语言模拟试题 10. 以下程序片段的时间复杂度为( )

之前在牛客的一个群中看到有位哥们发的题 好像是洛谷哪次的模拟题&#xff0c;还写着什么 LGR SCP-J 2023 c语言模拟试题 题目 就是给段代码询问时间复杂度 for (int i1; i<n; i){for (int j1; j<n; ji){for (int k1; k<n; k j){}} } 跑代码 一开始想不出怎么解就…

实战SpringMVC之CRUD

目录 一、前期准备 1.1 编写页面跳转控制类 二、实现CRUD 2.1 相关依赖 2.2 配置文件 2.3 逆向生成 2.4 后台代码完善 2.4.1 编写切面类 2.4.2 编写工具类 2.4.3 编写biz层 2.4.4 配置mapper.xml 2.4.5 编写相应接口类&#xff08;MusicMapper&#xff09; 2.4.6 处…

小程序的使用

微信小程序开发 外部链接别人的总结查看&#xff08;超详细保姆式教程&#xff09; 基础语法 1.数据绑定 1.1 初始化数据 页面.js的data选项中Page({data: {motto: Hello World,id:18} })使用数据 单项数据流&#xff1a;Mustache 语法 a)模板结构中使用双大括号 {{data}} …

java封装国密SM4为 jar包,PHP调用

java封装国密SM4为 jar包,PHP调用 创建java工程引入SM4 jar包封装CMD可调用jar包PHP 传参调用刚用java弄了个class给php调用,本以为项目上用到java封装功能的事情就结束了,没想到又来了java的加密需求,这玩意上头,毕竟不是强项,没办法,只好再次封装。 但是这次的有点不…

win10系统配置vmware网络NAT模式

1&#xff0c;查看win10 IP地址&#xff1a;ipconfig 2, vmware设置&#xff1a;编辑>>虚拟网络编辑器>>点击添加网络&#xff08;选择NAT模式&#xff09; 3&#xff0c;虚拟机网络设置&#xff1a;点击VMware虚拟机>>设置>>网络适配器 4&#xff…

【常用代码14】el-input输入框内判断正则,只能输入数字,过滤汉字+字母。

问题描述&#xff1a; el-input输入框&#xff0c;只能输入数字&#xff0c;但是不能显示输入框最右边的上下箭头&#xff0c; <el-input v-model"input" type"number" placeholder"请输入内容" style"width: 200px;margin: 50px 0;&…

YOLO总结,从YOLOv1到YOLOv3

YOLOv1 论文链接&#xff1a;https://arxiv.org/abs/1506.02640 检测原理 将检测问题转换成回归问题&#xff0c;一个CNN就搞定。即得到一个框的中心坐标(x, y)和宽高w&#xff0c;h&#xff0c;然后作回归任务。 B是两个框&#xff0c;5是指参数量&#xff0c;x y w h是确定…

港联证券:综合施策提振信心 资本市场新一轮深化改革拉开帷幕

本钱商场新一轮深化变革开放已拉开帷幕。活泼本钱商场“25条”、北交所“深改19条”、标准股份减持行为规定……这些方针举动从出资端、融资端、买卖端等协同发力&#xff0c;既注重短期痛点问题&#xff0c;又着眼久远、安身变革准则完善&#xff0c;有助于构成活泼商场、提振…

2023-9-8 满足条件的01序列

题目链接&#xff1a;满足条件的01序列 #include <iostream> #include <algorithm>using namespace std;typedef long long LL;const int mod 1e9 7;int qmi(int a, int k, int p) {int res 1;while(k){if(k & 1) res (LL) res * a % p;a (LL) a * a % p;…

2023年软件开发领域的发展趋势

科技趋势引领着软件开发行业的发展。对于开发商来说&#xff0c;将会看到更多的市场增长机会。因此&#xff0c;很多人都想了解软件开发的最新趋势。IT行业正在等待一个范式转变&#xff0c;而科技的好处在于不断发展&#xff0c;势不可挡&#xff0c;并且用途广泛。 很多专业人…

python串口采集数据绘制波形图

这个示例使用 matplotlib 绘制图形&#xff0c;它能够从串口实时读取数据并绘制成波形图。确保你已经替换了 ‘COM11’ 和 9600 为正确的串口号和波特率。 import serial import matplotlib.pyplot as plt from collections import deque import struct# 配置串口参数 ser s…

SpringMVC之CRUD------增删改查

目录 前言 配置文件 pom.xml文件 web.xml文件 spring-context.xml spring-mvc.xml spring-MyBatis.xml jdbc.properties数据库配置文件 generatorConfig.xml log4j2日志文件 后台 PageBaen.java PageTag.java 切面类 biz层 定义一个接口 再写一个实现类 …

vue3嵌套路由keep-alive问题

传统解决方法参考此链接Vue3 嵌套路由中使用 keep-alive缓存多层 - 掘金 我想说的是&#xff1a; 嵌套路由的上级不写componet就行了啊&#xff01;&#xff01;&#xff01;被折磨了两次的顿悟

LeetCode-77-组合

一&#xff1a;题目描述&#xff1a; 给定两个整数 n 和 k&#xff0c;返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案。 二&#xff1a;示例与提示 示例 1: 输入&#xff1a;n 4, k 2 输出&#xff1a; [[2,4],[3,4],[2,3],[1,2],[1,3],[1,4…

双系统时间问题、虚拟机扩展空间问题

文献阅读计划&#xff1a; 首先要用ChatGPT查文献&#xff0c;用关键字查询&#xff0c;然后去搜索 add cyun 9.8 但是我发现好难搜啊&#xff0c;或者说相关的关键词搜不出来东西啊。不过师兄倒是搜的挺多的&#xff0c;这一点要再去好好学习一下 双系统时间问题&#xff1a…

前缀(波兰式)、中缀、后缀(逆波兰)表达式;中缀转后缀

前缀表达式的计算机求值 注意&#xff1a;在前缀表达式中&#xff0c;遇到运算符时&#xff0c;如“-”&#xff0c;是栈顶元素 - 次顶元素 中缀表达式 后缀表达式 注意&#xff1a;在后缀表达式中&#xff0c;遇到运算符时&#xff0c;如“-”&#xff0c;是次顶元素 - 栈顶元…

【Docker】实现JMeter分布式压测

一个JMeter实例可能无法产生足够的负载来对你的应用程序进行压力测试。如本网站所示&#xff0c;一个JMeter实例将能够控制许多其他的远程JMeter实例&#xff0c;并对你的应用程序产生更大的负载。JMeter使用Java RMI[远程方法调用]来与分布式网络中的对象进行交互。JMeter主站…

Springboot 实践(14)spring config 配置与运用--手动刷新

前文讲解Spring Cloud zuul 实现了SpringbootAction-One和SpringbootAction-two两个项目的路由切换&#xff0c;正确访问到项目中的资源。这两个项目各自拥有一份application.yml项目配置文件&#xff0c;配置文件中有一部分相同的配置参数&#xff0c;如果涉及到修改&#xf…

ajax实现百度一下模糊查询功能

1、效果 如下图所示&#xff0c;我们在输入大学时&#xff0c;程序会到后端查询名字中包含大学的数据&#xff0c;并展示到前端页面。 用户选择一个大学&#xff0c;该大学值会被赋值到input表单&#xff0c;同时关闭下拉表单&#xff1b; 当页面展示的数据都不符合条件时&…