P3089 [USACO13NOV] Pogo-Cow S 弹簧踩高跷
P3089 [USACO13NOV] Pogo-Cow S 弹簧踩高跷
洛谷题目传送门
文章目录
- P3089 [USACO13NOV] Pogo-Cow S 弹簧踩高跷
- 题目描述
- 输入格式
- 输出格式
- 样例 #1
- 样例输入 #1
- 样例输出 #1
- 提示
- 题目大意
- 方法一(线段树维护dp)
- code
- 方法二 (单调队列维护dp)
- code
题目描述
In an ill-conceived attempt to enhance the mobility of his prize cow Bessie, Farmer John has attached a pogo stick to each of Bessie’s legs. Bessie can now hop around quickly throughout the farm, but she has not yet learned how to slow down.
To help train Bessie to hop with greater control, Farmer John sets up a practice course for her along a straight one-dimensional path across his farm. At various distinct positions on the path, he places N targets on which Bessie should try to land (1 <= N <= 1000). Target i is located at position x(i), and is worth p(i) points if Bessie lands on it. Bessie starts at the location of any target of her choosing and is allowed to move in only one direction, hopping from target to target. Each hop must cover at least as much distance as the previous hop, and must land on a target.
Bessie receives credit for every target she touches (including the initial target on which she starts). Please compute the maximum number of points she can obtain.
FJ给奶牛贝西的脚安装上了弹簧,使它可以在农场里快速地跳跃,但是它还没有学会如何降低速度。
FJ觉得让贝西在一条直线的一维线路上进行练习,他在不同的目标点放置了N (1 <= N <= 1000)个目标点,目标点i在目标点x(i),该点得分为p(i)。贝西开始时可以选择站在一个目标点上,只允许朝一个方向跳跃,从一目标点跳到另外一个目标点,每次跳跃的距离至少和上一次跳跃的距离相等,并且必须跳到一个目标点。
每跳到一个目标点,贝西可以拿到该点的得分,请计算他的最大可能得分。
输入格式
* Line 1: The integer N.
* Lines 2…1+N: Line i+1 contains x(i) and p(i), each an integer in the range 0…1,000,000.
输出格式
* Line 1: The maximum number of points Bessie can receive.
样例 #1
样例输入 #1
6
5 6
1 1
10 5
7 6
4 8
8 10
样例输出 #1
25
提示
There are 6 targets. The first is at position x=5 and is worth 6 points, and so on.
Bessie hops from position x=4 (8 points) to position x=5 (6 points) to position x=7 (6 points) to position x=10 (5 points).
题目大意
草场上有一条直线,直线上有若干个目标点。每个目标点都有一个分值和一个坐标。现在你可以选择其中任意一个目标点开始跳,只能沿一个方向跳,并且必须跳到另一个目标点。且每次跳的距离都不能少于上一次的距离。请问你能得到的最大分值是多少?、
方法一(线段树维护dp)
考试时就是想到了这个做法,但是改了时限100ms过不了
设 f i , j f_{i , j} fi,j 表示只通过 j j j 步到达点 i i i 的最大分值。
j j j 会炸空间?
j j j 其实最多只有 n 2 n^2 n2 种可能,乱搞一下就好了
那么:
f i , j = M a x k = 1 i − 1 ( M a x l = 0 j f k , l + p i ) f_{i , j} = Max_{k = 1}^{i - 1}(Max_{l = 0}^jf_{k , l} + p_i) fi,j=Maxk=1i−1(Maxl=0jfk,l+pi)
用线段树维护一下 f k , l f_{k , l} fk,l 就好了
code
#include <bits/stdc++.h>
#define fu(x, y, z) for (int x = y; x <= z; x++)
#define fd(x, y, z) for (int x = y; x >= z; x--)
#define LL long long
using namespace std;
const int N = 1005, M = 1000005;
struct node {int x, p;
} t[N];
LL ans;
int n, cnt, flg[M], p[M], p1[M], K = 1000005, len, dis[N][N];
struct Tr {LL val;int lp, rp;
} tr[M * 8];
bool cmp(node x, node y) { return x.x < y.x; }
void glp(int x) { tr[x].lp = ++len; }
void grp(int x) { tr[x].rp = ++len; }
void updata(int x) { tr[x].val = max(tr[tr[x].lp].val, tr[tr[x].rp].val); }
void change(int x, int l, int r, int pos, LL v) {if (l == r)tr[x].val = max(tr[x].val, v);else {int mid = l + r >> 1;if (pos <= mid) {if (!tr[x].lp)glp(x);change(tr[x].lp, l, mid, pos, v);} else {if (!tr[x].rp)grp(x);change(tr[x].rp, mid + 1, r, pos, v);}updata(x);}
}
int query(int x, int l, int r, int pos) {if (r <= pos)return tr[x].val;else {int mid = l + r >> 1, max1 = 0, max2 = 0;if (tr[x].lp)max1 = query(tr[x].lp, l, mid, pos);if (mid < pos && tr[x].rp)max2 = query(tr[x].rp, mid + 1, r, pos);return max(max1, max2);}
}
void clear(int x) {if (tr[x].lp)clear(tr[x].lp);if (tr[x].rp)clear(tr[x].rp);tr[x].val = tr[x].lp = tr[x].rp = 0;
}
void fans() { fu(i, 1, n) ans = max(ans, tr[i].val); }
int main() {scanf("%d", &n);fu(i, 1, n) scanf("%d%d", &t[i].x, &t[i].p);sort(t + 1, t + n + 1, cmp);fu(i, 1, n) fu(j, 1, n) dis[i][j] = abs(t[i].x - t[j].x);fu(i, 1, n) fu(j, 1, n) {if (!flg[dis[i][j]]) {flg[dis[i][j]] = 1;p[++cnt] = dis[i][j];K = max(K, dis[i][j]);}}sort(p + 1, p + cnt + 1);fu(i, 1, cnt) p1[p[i]] = i;len = n;fu(i, 1, n) {ans = max(ans, 1ll * t[i].p);change(i, 0, K, p1[0], 1ll * t[i].p);}int k, k2;fu(i, 1, n) {fu(j, 1, i - 1) {k = query(j, 0, K, p1[dis[i][j]]);k2 = query(i, 0, K, p1[dis[i][j]]);if (k + t[i].p > k2)change(i, 0, K, p1[dis[i][j]], k + t[i].p);}}fans();fu(i, 1, n) clear(i);len = n;fu(i, 1, n) change(i, 0, K, p1[0], t[i].p);fd(i, n, 1) {fd(j, n, i + 1) {k = query(j, 0, K, p1[dis[i][j]]);k2 = query(i, 0, K, p1[dis[i][j]]);if (k + t[i].p > k2)change(i, 0, K, p1[dis[i][j]], k + t[i].p);}}fans();printf("%lld", ans);
}
然后因为查找函数没有加等号 , 就寄掉8分。
差点就AK了

方法二 (单调队列维护dp)
设 f i , j f_{i , j} fi,j 表示从 j j j 到 i i i 的最大分值 , 用单调队列维护
好像宏定义会慢一点?
code
#include <bits/stdc++.h>
#define LL long long
#define fu(x , y , z) for(int x = y ; x <= z ; x ++)
using namespace std;
const int N = 2005;
struct node {int x , p;
} t[N];
int n , k;
LL ans , f[N][N];
inline bool cmp (node x , node y) { return x.x < y.x; }
inline bool cmp1 (node x , node y) { return x . x > y.x; }
inline void fans (int flg) {memset (f , -0x3f , sizeof (f));if (flg == 1) sort (t + 1 , t + n + 1 , cmp);else sort (t + 1 , t + n + 1 , cmp1);for (int j = 1 ; j <= n ; j ++) {f[j][j] = t[j].p;for (int i = j + 1 , k = j + 1 ; i <= n ; i ++) {f[i][j] = f[i - 1][j] - t[i - 1].p;while (k > 1 && (t[j].x - t[k - 1].x) * flg <= (t[i].x - t[j].x )* flg)f[i][j] = max (f[i][j] , f[j][--k]);f[i][j] += t[i].p;ans = max (ans , f[i][j]);}ans = max (ans , f[j][j]);}
}
int main () {scanf ("%d" , &n);fu (i , 1 , n) scanf ("%d%d" , &t[i].x , &t[i].p);sort (t + 1 , t + n + 1 , cmp);fans (1);fans (-1);printf ("%lld" , ans);return 0;
}
相关文章:
P3089 [USACO13NOV] Pogo-Cow S 弹簧踩高跷
P3089 [USACO13NOV] Pogo-Cow S 弹簧踩高跷 洛谷题目传送门 文章目录 P3089 [USACO13NOV] Pogo-Cow S 弹簧踩高跷题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示题目大意方法一(线段树维护dp)code 方法二 (单调队列维护dp&…...
计算机网络 - 第一章(下)
1.2_1 分层结构、协议、接口、服务_哔哩哔哩_bilibili1.2_1 分层结构、协议、接口、服务是王道计算机考研 计算机网络的第7集视频,该合集共计76集,视频收藏或关注UP主,及时了解更多相关视频内容。https://www.bilibili.com/video/BV19E411D78…...
【Uniapp】小程序携带Token请求接口+无感知登录方案2.0
本次改进原文《【Uniapp】小程序携带Token请求接口无感知登录方案》,在实际使用过程中我发现以下bug: 若token恰好在用户访问接口时到期,就会直接查询为空,不反映token过期问题(例如:弹窗显示订单查询记录…...
Ubuntu常用命令
文章目录 1:文件管理2:文档编辑3:系统管理4:磁盘管理5:文件传输6:网络通讯7:设备管理8:备份压缩9:其他命令扩展:知识干货 1:文件管理 ls命令 –…...
ERP重构-SLA子分类账-分布式实现方案
背景 ERP中的GL总账模块,明细数据来源于各个业务模块如库存、成本、应收、应付、费控、资产等,统称为子模块,生成的账叫做子分类账。然而记账的业务逻辑各式各样,但是最终输出都是来源、类型、期间、科目、借贷金额等等关键信息。…...
IP路由协议(RIP、IGRP、OSPF、IS-IS、BGP)
文章目录 1、路由分类2、RIP协议1)RIP的工作原理2)RIP路由表的更新过程3)RIP路由表的更新原则4)RIP的特性5)RIP协议的版本 4、IGRP协议1)IGRP路由表的更新2)IGRP的度量标准 5、OSPF协议1&#x…...
互斥锁、自旋锁、读写锁、悲观锁、乐观锁的应用场景
多线程访问共享资源的时候,避免不了资源竞争而导致数据错乱的问题,所以我们通常为了解决这一问题,都会在访问共享资源之前加锁。 最常用的就是互斥锁,当然还有很多种不同的锁,比如自旋锁、读写锁、乐观锁等࿰…...
Python WSGI 与 Web 开发框架
目录 文章目录 目录WSGIWSGI 的工作原理environ 参数start_resposne 参数 WSGI 的中间件 WSGI Web 开发框架OpenStack 中的应用案例进程入口WSGI Application 加载Paste/PasteDeployRoutesWebOb WSGI Server 启动 WSGI WSGI(Web Server Gateway Interfaceÿ…...
[洛谷]P6464 [传智杯 #2 决赛] 传送门
看到数据范围:n<100,嗯......脑子闪过:还在想什么呢!Floyd啊。哈哈哈 思路: 详细注释: 话不多说,上ACcode!: #include<bits/stdc.h> using namespace std; #define int lo…...
Http协议和RestTemplate协议有什么区别?
目录 一、功能不同 二、技术不同 三、使用场景不同 四、总结 RestTemplate 是一个 Spring 框架提供的用于发送 HTTP请求的客户端工具,它封装了 Java 原生的 HTTP 客户端库,并提供了一组简洁易用的 API 来发送 HTTP 请求和处理响应。而 HTTPÿ…...
基于SpringBoot+微信小程序的医院预约叫号小程序
✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取项目下载方式🍅 一、项目背景介绍: 该项目是基于uniappWe…...
springboot整合RabbitMQ 消费端处理数据
pom 依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId></dependency>写一个rabbitmq配置文件 import org.springframework.amqp.core.Binding; import org.springframewo…...
计算机中CPU、内存、缓存的关系
CPU(Central Processing Unit,中央处理器) 内存(Random Access Memory,随机存取存储器) 缓存(Cache) CPU、内存和缓存之间有着密切的关系,它们共同构成了计算机系统的核…...
【Linux实验】构造一个简单的 shell
一、实验目的 l 用 C/C++构造一个简单的 shell; l 理解 shell 程序的功能; l 学会 shell 的使用;...
【电路原理学习笔记】第2章:电压、电流和电阻:2.6 电路
第2章:电压、电流和电阻 2.6 电路 2.6.1 电流的方向 电流方向有两种说法,一种按电子流动方向,另一种是传统的认为从正极流出到负极,这本教材采用传统电流方法。(事传统派,维新派输了,1&#…...
基于深度学习的人脸检测技术
用到环境 1、pycharm community edition 2022.3.2 2、Python 3.10 整篇内容都已上传至我的csdn资源中,想用的请移步。 流程 多任务级联卷积神经网络(Multi-task Cascaded Convolutional Networks, MTCNN)算法进行人脸检测 普通人脸检测 单人人脸检测 图1 单人人…...
【linux kernel】一文总结linux内核通知链
文章目录 1、通知链简介2、通知链的类型3、原理分析和API(1)注销通知器(2)注销通知器(3)通知链的通知 4、实例代码(1)定义一个通知链(2)实现观察者模块&#…...
kafka入门,Kafka 副本(十三)
Kafka副本 副本基本信息 1)Kafka副本作用,提高数据可靠性 2)Kafka默认副本1个,生产环境一般配置2个,保证数据可靠性,太多副本会增加磁盘存储空间,增加网络上数据传输,降低效率 3&a…...
利用PPT制作简单的矢量图
1.用PPT画一个图形(可以多个图) 2.鼠标圈住图形 3.利用 Ctrl G 组合图形,再用 Ctrl C 复制 4.打开word—粘贴—选择性粘贴—图片(增强性图元文件) 确认即可。...
18-Linux 常用命令
目录 1.ls PS:FinalShell设置背景和字体 2.pwd 3.cd PS:认识 Linux 目录结构——Linux 是一个树形目录结构 PS:绝对路径 vs 相对路径 PS:使用 tab 键补全 PS:使用 ctrl c 重新输入 4.touch PS:L…...
19c补丁后oracle属主变化,导致不能识别磁盘组
补丁后服务器重启,数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后,存在与用户组权限相关的问题。具体表现为,Oracle 实例的运行用户(oracle)和集…...
docker详细操作--未完待续
docker介绍 docker官网: Docker:加速容器应用程序开发 harbor官网:Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台,用于将应用程序及其依赖项(如库、运行时环…...
Spring Boot 实现流式响应(兼容 2.7.x)
在实际开发中,我们可能会遇到一些流式数据处理的场景,比如接收来自上游接口的 Server-Sent Events(SSE) 或 流式 JSON 内容,并将其原样中转给前端页面或客户端。这种情况下,传统的 RestTemplate 缓存机制会…...
(二)TensorRT-LLM | 模型导出(v0.20.0rc3)
0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述,后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作,其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...
测试markdown--肇兴
day1: 1、去程:7:04 --11:32高铁 高铁右转上售票大厅2楼,穿过候车厅下一楼,上大巴车 ¥10/人 **2、到达:**12点多到达寨子,买门票,美团/抖音:¥78人 3、中饭&a…...
spring:实例工厂方法获取bean
spring处理使用静态工厂方法获取bean实例,也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下: 定义实例工厂类(Java代码),定义实例工厂(xml),定义调用实例工厂ÿ…...
Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级
在互联网的快速发展中,高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司,近期做出了一个重大技术决策:弃用长期使用的 Nginx,转而采用其内部开发…...
leetcodeSQL解题:3564. 季节性销售分析
leetcodeSQL解题:3564. 季节性销售分析 题目: 表:sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...
Kafka入门-生产者
生产者 生产者发送流程: 延迟时间为0ms时,也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于:异步发送不需要等待结果,同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...
【从零学习JVM|第三篇】类的生命周期(高频面试题)
前言: 在Java编程中,类的生命周期是指类从被加载到内存中开始,到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期,让读者对此有深刻印象。 目录 …...
