CF1603E - A Perfect Problem
Tangninghaha · · 题解
题意:
定义一个可重集是好的,当且仅当集合中最大值
定义一个序列是完美的,当且仅当这个序列每一个子序列构成的可重集是好的。
求长度为
这题很厉害,需要先发现若干个性质:
-
将序列排序之后,区间的限制一定比子序列严格,所以只需要考虑区间的限制。
-
前缀的限制是最严格的。
考虑一个区间,将左端点左移,那么最小值会变小,和会变大,限制更严格。所以原序列完美等价于每一个前缀是好的。
-
记前 $i$ 个数的和为 $s_i$。由于 $s_k\ge k\times a_1$,如果 $a_k<k$,那么 $k\times a_1>a_k\times a_1$,于是有 $s_k>a_k\times a_1$,不合法。 -
若
a_k=k ,则\forall i<k,a_i=k 。由于合法条件
s_{k}\le a_k\times a_1=k\times a_1 ,也就是\sum_{i\le k}a_i\le k\times a_1 ,移项得到\sum_{i\le k}(a_1-a_i)\ge 0 ,由于有序,所以a_i=a_1=a_k=k 。 -
若
a_n=n+1 ,a_{[1,n]} 是好的,且存在a_{k}\ge k + 1 ,则a_{[1,k]} 是好的。 -
由性质 4 得到,若
其余的都满足
所以可以利用性质进行 DP,这个序列满足(只考虑了
-
a_1\le a_i\le n+1,1\le i\le a_1 -
i+1\le a_i\le n+1,i>a_1 -
为了简洁可以将
-
0\le b_i\le n+1-a_1,i\le a_1 -
i+1-a_1\le b_i\le n+1-a_1,i>a_1 -
\sum_{i=1}^{n}b_i\le a_1
可以将第二个限制和第一个限制改写成:所有
设
实际上第二个约束非常严格,很多情况是无解的。具体来说,设
于是总复杂度变为
My Submission
如果有错误请指出。