A Twisty Movement
题意
给出n个数字,由1、2组成,你可以选择一个区间[L,R],将其逆转,使得集合中的**非递减子序列**最长。
(不是子串。。。)
思路
“ 由于序列只由1和2组成,显然我们需要找到最长非递减子序列中第一个2出现的位置pos,那么逆序后[l,pos]会使后面2个数目增加,[pos,r]会使前面1个数目增加。
于是我们先处理出“1”的前缀个数和与“2”的后缀个数和,然后我们每次枚举前面提到的位置pos,然后再依次枚举区间的l和r。
然后分别滑动L,R的值,计算其对最长不降子序列贡献的最大值。
对于l,计算[1,L-1]中1的个数和[l,pos]中2的个数和的最大值。
对于2,计算[R,n]中2的个数和[pos,r-1]中1的个数和的最大值。” (网络)
看!代码
1 |
|