村长 发表于 2020-12-5 22:23:06

【LSP】Discrete Centrifugal Jumps


http://cdn.u1.huluxia.com/g4/M01/65/6D/rBAAdl91R8eAdnIQAACt4WdlvYs991.jpg
题意:

给你n个数hi,你刚开始在第1个数的位置,你需要跳到第n个数的位置。

1、对于i、j(i<j) 如果满足

max(hi+1,…,hj?1)<min(hi,hj)

max(hi,hj)<min(hi+1,…,hj?1)

那么就可以从i直接一步跳到j位置



2、如果j=i+1,那么也可以直接跳过去



问你从第一个位置跳到第n个位置,最少需要跳多少次



题解:

我们设dp表示:从第一个位置跳到第i个位置最小需要跳多少次

我们最重要的就是找在这个区间内的k,哪个位置可以跳到i位置以使得dp尽可能小。如果暴力查找的话,那么复杂度就是O(n*n),看一下数据就知道TLE



那我们就要用一种数据结构来使得找这个k,这里我们使用栈,为什么不使用队列,因为如果满足

max(hk+1,…,hi-1)<min(hk,hi)

max(hk,hi)<min(hk+1,…,hi-1)

就可以从k一步跳到i,我们使用单调队列那么就是从头开始了。



我们维护两个单调栈,一个非严格递增,另一个非严格递减

我们在这里讨论非严格单调递增栈的维护过程:



如果一个数vi在放入栈之前,判断得知hi>=h,那么就可以从r.top位置跳到i位置。

这个时候有一个问题,如果你把栈中的一些元素pop掉了,但是这些元素还可以更新大于i的位置的dp值 这个时候会影响最后的结果吗?

其实是不会影响的,因为如果hk在hi进行栈之前被pop掉了,那么hk肯定是小于hi的。如果hk可以更新hj的信息(i<j) 那么vk和vj中那个大的肯定会小于min(vk+1,vk+2...vj-1)。 那么这个时候我们看我们维护的另一个非严格下降序列,它会替我们考虑这个问题的

所以这样实现起来其实是没有问题的



代码:http://cdn.u1.huluxia.com/g4/M01/65/6D/rBAAdl91R8mATPs7AAC3PiM9q6s504.jpg

千百渡 发表于 2020-12-6 09:33:31

支持,楼下的跟上哈~

大司命 发表于 2020-12-6 21:41:37

报告!别开枪,我就是路过来看看的。。。

伴我多久 发表于 2020-12-9 06:26:16

楼主呀,,,您太有才了。。。

天镜盗梦 发表于 2020-12-9 16:23:42

为毛老子总也抢不到沙发?!!

yichong 发表于 2020-12-11 06:39:41

小白一个 顶一下
页: [1]
查看完整版本: 【LSP】Discrete Centrifugal Jumps

村长黑科技是专业提供项目资源的服务的村长黑科技平台,如合购网赚项目、引流推广软件、软件程序开发等项目就选村长黑科
技平台参与或发布项目定制各种软件就来村长黑科技平台

本站中所有被研究的素材与信息全部来源于互联网,版权争议与本站无关。本站所发布的任何软件的破解分析文章、破解分析视频、补丁、注册机和注册信息,

仅限用于学习和研究软件安全的目的。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。学习破解分析技术是为了更好的完善软件可能存在的不安全因素,提升软件安全意识。所以您如果喜欢某程序,

请购买注册正版软件,获得正版优质服务!不允许将上述内容私自传播、销售或者其他任何非法用途!否则,产生任何法律责任,一切后果请用户自负,与本网站无关!如有侵权或非法用途请举报!请发送到邮箱:cxphj8@foxmail.com

《意见反馈》或《截图指定页面备注》发送到邮件,收到后24小时内删除,禁止用户学习使用关掉用户【学习使用权】!