贪心/前后缀优化dp,CF 575F - Bulbo

news2024/9/20 13:54:38

一、题目

1、题目描述

2、输入输出

2.1输入

2.2输出

3、原题链接

575F - Bulbo


二、解题报告

1、思路分析

F1 前后缀分离优化dp

点 的值域很大,但是线段数目很少,只有5000量级

也就是说最多有10000 个 不同的点

我们将所有点从小到大排序得到点集数组a[], 考虑朴素dp

定义状态 f(i, j) 为 第 i 轮移动到 第 j 个点的最小花费

那么 f(i, j) = cost(li, ri, a[j]) + min(f(i - 1, k) + abs(a[j] - a[k]))

这样我们每次需要O(n)转移

但是由于我们已经将点按照从小到大排序,所以可以脱绝对值,每轮提前预处理前后缀最小值,优化转移为O(1),这样的做法为O(N^2)的时间复杂度

F2 贪心

我们先手玩几轮:

初始位置 x,第一轮在 [a, b],x在区间外:

我们从x 移动到 [x, a] 内任意一点,总花费都是a - x,再靠右,花费变大,我们记 [l, r] 为本轮的最优区间,此处l = x,r = a

下一轮:

同样是无相交

 我们本轮最小花费是a - r,只要我们上轮移动到r即可,而移动到r不会影响上轮的最小花费

得到新的最优区间:[r, a]

下一轮:

有相交

最小花费为r - a,要求我们上轮移动到[a, r],不会影响上一轮最小值

得到新的最优区间:[a, r]

也就是说我们每次只有相交和不相交两种情况,相交的情况花费为0,只需调整最优区间

不相交的情况花费为空隙,累加花费的同时调整最优区间

主观上这个贪心每轮都是取了最小值并且不影响上一轮的最小值是正确的,我们可以数学归纳法证明贪心正确,这里略

2、复杂度

时间复杂度: O(N)空间复杂度:O(1)

3、代码详解

 ​
import sys

input = lambda: sys.stdin.readline().strip()
MII = lambda: map(int, input().split())
LMI = lambda: list(map(int, input().split()))
LI = lambda: list(input())
II = lambda: int(input())
I = lambda: input()
fmax = lambda x, y: x if x > y else y
fmin = lambda x, y: x if x < y else y
P = 1_000_000_007

def solve():
    n, x = MII()
    l = r = x
    res = 0
    for i in range(n):
        L, R = MII()
        if L > r or R < l:
            nl, nr = min(r, R), max(l, L)
            res += nr - nl
            l, r = nl, nr
        else:
            nl, nr = max(l, L), min(r, R)
            l, r = nl, nr
    print(res)

if __name__ == "__main__":
    T = 1
    # T = II()
    for _ in range(T):
        solve()

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

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

相关文章

【python】OpenCV—Greedy Snake

文章目录 1、代码实现2、涉及到的库——cv2.setWindowProperty 1、代码实现 import cv2 import numpy as np from random import choiceclass SnakePart:def __init__(self, front, x, y):self.front frontself.x xself.y ydef move(self):# 跟随它前面的部分移动self.x s…

数据结构:链表经典算法OJ题

目录 前言 一、移除链表元素 二、反转链表 三、合并两个有序链表 四、链表的中间节点 五、环形链表的约瑟夫问题 前言 在了解了链表的相关知识后&#xff0c;我们还需要一些题目进行练习加深对链表这方面知识的理解&#xff0c;也可以用来检测链表这块学的的怎么样&#…

【手撕数据结构】二叉树和堆

目录 树的概念树的相关概念二叉树二叉树的概念满二叉树和完全二叉树 堆的概念与结构堆的向上调整算法思路分析代码详细解说 堆的向下调整算法算法图解分析代码详解分析 堆的各个接口堆的定义及声明堆的初始化堆的销毁堆的插入堆的删除取堆顶数据堆的数据个数堆的判空 树的概念 …

【CVE-2024-38077】核弹级Windows RCE漏洞如何自检并修复该漏洞(附批量漏洞检测工具及分析伪代码)

代码详细分析点击此处 # 伪代码分析链接 工具为官方工具&#xff0c;师傅可自行测试 深信服CVE-2024-38077漏洞扫描工具.exe Algorithm : SHA1Hash : 85ECBDB053950A20B9748E867586D059AAA19115Algorithm : SHA256Hash : 1BF3A372F95C4F5B2D776C6ABB1E9BCA51933C3…

机器学习·L3W2-协同过滤

推荐算法 推荐算法可以预测用户评分&#xff0c;并根据评分推荐数据 推荐算法与其他预测算法的区别在于&#xff1a;推荐算法中的数据大多都不完整&#xff0c;用户只对几个电影评分&#xff1b;而预测算法则要求数据完整&#xff0c;便于拟合和预测 协同过滤 评分矩阵Y&#x…

Install pytorch 使用 torch 的例子

如果不知道怎么开始和安装软件 从这里开始 如果需要GPU版本&#xff0c;请选择CUDA&#xff0c;而不是CPU PyTorchhttps://pytorch.org/ Python 3.8.13 | packaged by conda-forge | (default, Mar 25 2022, 06:04:10) [GCC 10.3.0] on linux Type "help", &quo…

k8s环境使用cronjob对mysql8进行备份

一、configmap 数据库备份脚本写入k8s环境的configmap文件&#xff0c;并生成config。 # cat mysql-back-configmap.yaml apiVersion: v1 kind: ConfigMap metadata:name: mysql8backnamespace: crontabs data:mysql8back.sh: |#!/bin/bashDUMPDIR/tmp#backupbackupDatedate…

【专题】2023-2024跨境旅游消费趋势研究报告合集PDF分享(附原数据表)

原文链接&#xff1a;https://tecdat.cn/?p37306 近日&#xff0c;“世界旅游联盟中欧旅游对话”在匈牙利布达佩斯举办&#xff0c;发布《2023 - 2024 跨境旅游消费趋势研究报告》。 报告显示&#xff0c;2023 - 2024 年全球旅游业复苏&#xff0c;跨境旅游人数和支出显著增加…

【Material-UI】Checkbox组件:Indeterminate状态详解

文章目录 一、什么是Indeterminate状态&#xff1f;二、Indeterminate状态的实现1. 基本用法示例2. 代码解析3. Indeterminate状态的应用场景 三、Indeterminate状态的UI与可访问性1. 无障碍设计2. 用户体验优化 四、Indeterminate状态的最佳实践1. 状态同步2. 优化性能3. 提供…

SQL Zoo 10.Window functions

以下数据均来自SQL Zoo 1.Show the lastName, party and votes for the constituency S14000024 in 2017.&#xff08;显示2017年选区“S14000024”的姓氏、政党和选票&#xff09; SELECT lastName, party, votesFROM geWHERE constituency S14000024 AND yr 2017 ORDER BY…

多个IT系统数据同步方案-操作标识

这是一个很普遍的方案&#xff0c;实现多个IT系统数据同步&#xff1a; 从上游发出的数据标识&#xff0c;就可以完整的控制数据&#xff0c;当然对上游的要求也多一些&#xff0c;就是打数据标识前一定要读取一下现有的数据。

Spring Boot 基于 SCRAM 认证集成 Kafka 的详解

一、说明 在现代微服务架构中&#xff0c;Kafka 作为消息中间件被广泛使用&#xff0c;而安全性则是其中的一个关键因素。在本篇文章中&#xff0c;我们将探讨如何在 Spring Boot 应用中集成 Kafka 并使用 SCRAM 认证机制进行安全连接&#xff1b;并实现动态创建账号、ACL 权限…

Android Studio生成系统签名platform.jks

准备工作&#xff1a; 系统工程师需要提供以下文件并且在同一个目录文件夹下面 1、platform.pk8 2、platform.x509.pem 3、signapk.jar(通用的) 按照以下顺序执行 1、platform.pk8和platform.x509.pem 生成 .jks 提供platform.pk8、platform.x509.pem 、signapk.jar&…

低代码革命:重塑开发效率与质量的未来

1. 引言 随着信息技术的快速发展&#xff0c;企业对应用程序的需求日益增长。然而&#xff0c;传统的软件开发模式面临着开发周期长、成本高、人才短缺等问题。近年来&#xff0c;“低代码”开发平台如雨后春笋般涌现&#xff0c;承诺让非专业人士也能快速构建应用程序。这种新…

Netty原理及高性能

1. Netty原理 Netty是一个基于Java的异步事件驱动的网络应用框架&#xff0c;他用于快速开发高性能、高可靠性的网络服务器和客户端应用。Netty的原理涉及多个方面&#xff0c;包括 Reactor模式、核心组件、编解码、线程模型以及TCP粘包和拆包处理等。 1.1 Reactor模式 Reactor…

玻璃存储还没整明白,陶瓷纳米存储又来了!

关注我们 - 数字罗塞塔计划 - 在信息爆炸的当下&#xff0c;我们每天产生的数据比以往任何时候都多。其实很多数据都是存储后很少被访问&#xff0c;但仍需要长期保存的“冷数据”。磁带、硬磁盘、光盘等传统存储介质难以提供冷数据存储所需的超长寿命、超大容量和持续可访问性…

Docker Compse单机编排

一.Docker Compse 介绍 Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。通过 Compose&#xff0c;你可以使用 YAML 文件来配置应用程序的服务、网络和卷&#xff0c;然后使用单个命令创建和启动所有服务。这使得在开发、测试和部署过程中管理多容器应用程…

精彩分享|暴雨亮相第二十届智能计算国际会议(ICIC 2024)

8月6日至8日&#xff0c;第二十届智能计算国际会议&#xff08;ICIC 2024&#xff09;在天津盛大召开&#xff0c;这场由宁波东方理工大学&#xff08;暂名&#xff09;主办&#xff0c;天津科技大学承办&#xff0c;中国矿业大学&#xff08;北京&#xff09;、中国矿业大学和…

【学习笔记】Matlab和python双语言的学习(非线性规划法)

文章目录 前言一、非线性规划法二、例题&#xff1a;选址问题1.确定决策变量2.确定约束条件3.确定目标函数4.建立模型5.求解 三、代码实现----Matlab1.Matlab 的 fmincon 函数&#xff08;1&#xff09;基本用法&#xff08;2&#xff09;简单示例 2.Matlab 代码第一问&#xf…

RegNet 图像识别网络,手写阿拉伯数字的图像分类

1、RegNet 网络介绍 regnet 是一个深度学习模型架构&#xff0c;用于图像分类任务。它是由 Facebook AI Research&#xff08;FAIR&#xff09;提出的&#xff0c;旨在实现高效的网络设计。regnet 通过在不同的网络层级上增加网络宽度和深度来提高模型性能。 regnet 的设计思…