郑州轻工业大学招新赛 3151: 江莉数组(动态规划)

news/2024/4/27 20:18:14/文章来源:https://blog.csdn.net/qq_45809243/article/details/137153535

题目链接

郑州轻工业大学西风校区的招新赛B题。其他题目都比较水就不写了。这个题用了线段树优化,但是不用也行(写都写了,就用了)。

题目描述有问题,“如果两相邻元素 b i , b i + 1 b_i, b_{i+1} bi,bi+1 满足 b i > b i + 1 b_i > b_{i+1} bi>bi+1,则惩罚值 + t +t +t ”有误。应该是 “如果两相邻元素 b i , b i + 1 b_i, b_{i+1} bi,bi+1 满足 b i ≥ b i + 1 b_i \ge b_{i+1} bibi+1,则惩罚值 + t +t +t ”。给出题人发邮件了不过目前还没修。


3151: 江莉数组

思路:

感觉和这场的C题的dp有点像。不过真写起来差的还是挺多的。

先不管江莉值,剩下部分的dp还是比较明显的:设 d p [ i ] [ j ] dp[i][j] dp[i][j] 表示前 i i i 个数,以 j j j 结尾的最大价值。转移方程也比较明显: d p [ i ] [ j ] = m a x { d p [ i − 1 ] [ j ] , d p [ i − 1 ] [ − 200 ∼ i − 1 ] + a i , d p [ i − 1 ] [ i ∼ 200 ] − t + a i } dp[i][j]=max\{dp[i-1][j],dp[i-1][-200\sim i-1]+a_i,\\dp[i-1][i\sim 200]-t+a_i\} dp[i][j]=max{dp[i1][j],dp[i1][200i1]+ai,dp[i1][i200]t+ai}发现我们第 i i i 个位置上的 d p dp dp 值只和第 i − 1 i-1 i1 个位置的 d p dp dp 值有关,所以我们直接优化掉第一维,这样状态转移就变成了 d p [ j ] = m a x { d p [ j ] , d p [ − 200 ∼ i − 1 ] + a i , d p [ i ∼ 200 ] − t + a i } dp[j]=max\{dp[j],dp[-200\sim i-1]+a_i,dp[i\sim 200]-t+a_i\} dp[j]=max{dp[j],dp[200i1]+ai,dp[i200]t+ai}这时时间复杂度为 O ( 400 n ) O(400n) O(400n),时间已经达标了,但是我们仍然可以优化,用线段树维护区间最大值,这样查询 m a x { d p [ − 200 ∼ i − 1 ] } max\{dp[-200\sim i-1]\} max{dp[200i1]} 以及 m a x { d p [ i ∼ 200 ] } max\{dp[i\sim 200]\} max{dp[i200]} 时就会变成 l o g log log 级别,整个时间复杂度就变成了 O ( l o g ( 400 ) n ) O(log(400)n) O(log(400)n) 了。

现在加入江莉值,其实不难发现,中间的项相消了,整个江莉值其实就是右端点减去左端点 r − l r-l rl。我们减左端点好说,我们在 d p dp dp 值选取第一个数的时候额外减去下标即可。右端点有点难办,因为我们不知道它什么时候会停。我们可以用上面那道题的做法,额外弄个 d p 2 dp2 dp2

不过这个题有个性质,那就是以某个值结尾时,这个值一定是最后一个,否则一定不优。因此我们知道了 d p [ j ] dp[j] dp[j],我们其实就已经知道它的右端点位置在哪了,就在最后一个 j j j 出现的位置。

code:

因为 a i a_i ai 的值有可能是负数,所以要加偏移量,都变成正数来处理。

#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;
typedef long long ll;
const int maxn=2e5+5;
const int offs=205;
const ll linf=1e18;int n,t;
ll a[maxn],ans;struct segement_tree{#define ls p<<1#define rs p<<1|1int n=offs<<1;struct Node{ll mx;Node(ll mx=-linf):mx(mx){};}tr[offs<<5];void push_up(int p){tr[p].mx=max(tr[ls].mx,tr[rs].mx);}void modify(int p,int l,int r,int id,ll x){if(l==r){tr[p].mx=x;return;}int mid=(l+r)>>1;if(id<=mid)modify(ls,l,mid,id,x);else modify(rs,mid+1,r,id,x);push_up(p);}void mdy(int id,ll x){modify(1,1,n,id,x);}ll query(int p,int l,int r,int L,int R){if(L<=l && r<=R){return tr[p].mx;}int mid=(l+r)>>1;if(mid>=R)return query(ls,l,mid,L,R);else if(mid<L)return query(rs,mid+1,r,L,R);else return max(query(ls,l,mid,L,R),query(rs,mid+1,r,L,R));}ll qmx(int l,int r){return query(1,1,n,l,r);}ll q(int idx){return qmx(idx,idx);}#undef ls#undef rs}tr;int main(){cin>>n>>t;for(int i=1;i<=n;i++)cin>>a[i];for(int i=1;i<=n;i++){ll v=max(a[i]-i,max(tr.qmx(1,a[i]+offs-1)+a[i],tr.qmx(a[i]+offs,offs<<1)+a[i]-t));tr.mdy(a[i]+offs,max(tr.q(a[i]+offs),v));ans=max(ans,v+i);}cout<<ans;return 0;
} 

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

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

相关文章

关于深度学习的 PyTorch 项目如何上手分析?从什么地方切入?

文章目录 PyTorch 项目分析1.背景2.分析流程 PyTorch 项目分析 1.背景 当我们拿到一个 PyTorch 的深度学习项目时&#xff0c;应该怎么入手&#xff1f;怎么去查看代码&#xff1f; 2.分析流程 首先阅读对应项目的 README.md 文件。通过阅读 README.md &#xff0c;一般可以…

【Redis面试题】Redis 的大 Key 对持久化有什么影响?

目录 大 Key 对 AOF 日志的影响大 Key 对 AOF 重写和 RDB 的影响总结 Redis 的持久化方式有两种&#xff1a;AOF 日志和 RDB 快照。 所以接下来&#xff0c;针对这两种持久化方式具体分析分析。 大 Key 对 AOF 日志的影响 先说说 AOF 日志三种写回磁盘的策略 Redis 提供了 3 …

记录在项目中引用本地的npm包

1、先把需要的包下载下来&#xff0c;以Photo Sphere Viewer 为引用的npm包、项目以shpereRepo为例子 git clone https://github.com/mistic100/Photo-Sphere-Viewer2、拉下代码后修改之后执行 ./build.sh build.sh #!/usr/bin/env bashyarn run build targetDir"../sh…

HarmonyOS 应用开发之UIAbility组件间交互(设备内)

UIAbility是系统调度的最小单元。在设备内的功能模块之间跳转时&#xff0c;会涉及到启动特定的UIAbility&#xff0c;该UIAbility可以是应用内的其他UIAbility&#xff0c;也可以是其他应用的UIAbility&#xff08;例如启动三方支付UIAbility&#xff09;。 本文将从如下场景…

Etcd 基本入门

1&#xff1a;什么是 Etcd ? Etcd 是 CoreOS 团队于2013年6月发起的开源项目&#xff0c;它的目标是构建一个高可用的分布式键值(key-value)数据库。etcd内部采用raft协议作为一致性算法&#xff0c;Etcd基于 Go 语言实现。 名字由来&#xff0c;它源于两个方面&#xff0c;…

面试笔记——MyBatis(执行流程、延迟加载和缓存)

MyBatis 是一个持久层框架&#xff0c;用于简化 Java 应用程序与数据库之间的交互过程。具体而言&#xff0c;它提供了一种将数据库操作映射到 Java 方法的方式&#xff0c;通过 XML 文件或注解配置 SQL 语句与 Java 方法的映射关系。使用 MyBatis&#xff0c;开发人员可以通过…

YOLOV8逐步分解(2)_DetectionTrainer类初始化过程

接上篇文章yolov8逐步分解(1)--默认参数&超参配置文件加载继续讲解。 1. 默认配置文件加载完成后&#xff0c;创建对象trainer时&#xff0c;需要从默认配置中获取类DetectionTrainer初始化所需的参数args&#xff0c;如下所示 def train(cfgDEFAULT_CFG, use_pythonFalse…

Docker-Container

Docker ①什么是容器②为什么需要容器③容器的生命周期容器 OOM容器异常退出容器暂停 ④容器命令清单总览docker createdocker rundocker psdocker logsdocker attachdocker execdocker startdocker stopdocker restartdocker killdocker topdocker statsdocker container insp…

Elasticsearch从入门到精通-07ES底层原理学习

Elasticsearch从入门到精通-07ES底层原理和高级功能 &#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是程序员行走的鱼 &#x1f4d6; 本篇主要介绍和大家一块学习一下ES底层原理包括集群原理、路由原理、分配控制、分配原理、文档分析原理、文档并发安全原理以及一些高…

第十四届蓝桥杯JavaA组省赛真题 - 特殊日期

解题思路&#xff1a; 暴力秒了 public class Main {public static void main(String[] args) {int cnt 0;for (int i 1900; i < 9999; i) {for (int j 1; j < 12; j) {for (int k 1; k < days(i, j); k) {if (sum(i) sum(j) sum(k)) cnt;}}}System.out.print…

算法笔记~—位运算

目录 常见位运算&#xff1a; 1、基础位运算 2、对于一个数n。确定、修改这个数n二进制x位。 3、提取&#xff08;确定&#xff09;一个数n最右侧的1&#xff08;bit&#xff09;与干掉最右侧的1&#xff08;bit&#xff09; 4、异或运算律 5、位运算的优先级&#xff1a…

Qt扫盲-QAssisant 集成其他qch帮助文档

QAssisant 集成其他qch帮助文档 一、概述二、Cmake qch例子1. 下载 Cmake.qch2. 添加qch1. 直接放置于Qt 帮助的目录下2. 在 QAssisant中添加 一、概述 QAssisant是一个很好的帮助文档&#xff0c;他提供了供我们在外部添加新的 qch帮助文档的功能接口&#xff0c;一般有两中添…

百度智能云千帆,产业创新新引擎

本文整理自 3 月 21 日百度副总裁谢广军的主题演讲《百度智能云千帆&#xff0c;产业创新新引擎》。 各位领导、来宾、媒体朋友们&#xff0c;大家上午好。很高兴今天在石景山首钢园&#xff0c;和大家一起沟通和探讨大模型的发展趋势&#xff0c;以及百度最近一段时间的思考和…

为什么Python不适合写游戏?

知乎上有热门个问题&#xff1a;Python 能写游戏吗&#xff1f;有没有什么开源项目&#xff1f; Python可以开发游戏&#xff0c;但不是好的选择 Python作为脚本语言&#xff0c;一般很少用来开发游戏&#xff0c;但也有不少大型游戏有Python的身影&#xff0c;比如&#xff1…

sheng的学习笔记-AI-人脸识别

目录:sheng的学习笔记-AI目录-CSDN博客 需要学习卷机神经网络等知识&#xff0c;见ai目录 目录 基础知识&#xff1a; 人脸验证&#xff08;face verification&#xff09; 人脸识别&#xff08;face recognition&#xff09; One-Shot学习&#xff08;One-shot learning&…

PTA-练习8

目录 实验5-3 使用函数求Fibonacci数 实验5-4 输出每个月的天数 实验5-9 使用函数求余弦函数的近似值 实验5-11 空心的数字金字塔 实验6-6 使用函数验证哥德巴赫猜想 实验6-7 使用函数输出一个整数的逆序数 实验6-8 使用函数输出指定范围内的完数 实验8-1-7 数组循环右…

Transformer的前世今生 day11(Transformer的流程)

Transformer的流程 在机器翻译任务中&#xff0c;翻译第一个词&#xff0c;Transformer的流程为&#xff1a; 先将要翻译的句子&#xff0c;一个词一个词的转换为词向量送入编码器层&#xff0c;得到优化过的词向量以及K、V&#xff0c;将K、V送入解码器层&#xff0c;并跟解码…

halcon例程学习——ball.hdev

dev_update_window (off) dev_close_window () dev_open_window (0, 0, 728, 512, black, WindowID) read_image (Bond, die/die_03) dev_display (Bond) set_display_font (WindowID, 14, mono, true, false) *自带的 提示继续 disp_continue_message (WindowID, black, true)…

android studio忽略文件

右键文件&#xff0c;然后忽略&#xff0c;就不会出现在commit里面了 然后提交忽略文件即可

Vue3 + Vite + TS + Element-Plus + Pinia项目(5)对axios进行封装

1、在src文件夹下新建config文件夹后&#xff0c;新建baseURL.ts文件&#xff0c;用来配置http主链接 2、在src文件夹下新建http文件夹后&#xff0c;新建request.ts文件&#xff0c;内容如下 import axios from "axios" import { ElMessage } from element-plus im…