题目描述
给出一段环状序列,即认为A[1]和A[N]是相邻的,选出其中连续不重叠且非空的两段使得这两段和最大。
(N≤2×105) ( N ≤ 2 × 10 5 )
题解
我相信大多数人第一眼看到这道题的想法就是破环成链。
但是一看数据范围N到了 10^5 ,那么你枚举断点就已经有O(n)的复杂度了,转移想要做到log什么的不太可能。
不妨先来看没有环的,一种做法就是预处理从前向后与从后向前记录到达每一个点的最大子段,再枚举断点把两端接起来。
另一种方法就是dp了,我们设 d
该博客介绍了如何解决Luogu P1121题目,即寻找环状序列中连续非重叠两段的最大和。由于数据范围限制,常规的破环成链方法在复杂度上不可行。博主提出了两种链状情况的解决方案:一是预处理前后最大子段,二是使用dp状态转移。当考虑环状特性时,只需在dp中强制选取首尾段,通过f和g数组分别从前向后和从后向前进行状态转移,以处理首位相接的情况。
给出一段环状序列,即认为A[1]和A[N]是相邻的,选出其中连续不重叠且非空的两段使得这两段和最大。
(N≤2×105) ( N ≤ 2 × 10 5 )
我相信大多数人第一眼看到这道题的想法就是破环成链。
但是一看数据范围N到了 10^5 ,那么你枚举断点就已经有O(n)的复杂度了,转移想要做到log什么的不太可能。
不妨先来看没有环的,一种做法就是预处理从前向后与从后向前记录到达每一个点的最大子段,再枚举断点把两端接起来。
另一种方法就是dp了,我们设 d
757

被折叠的 条评论
为什么被折叠?