其他分享
首页 > 其他分享> > AGC055C

AGC055C

作者:互联网

题面

link

​ 给定\(n,m\),求长度为\(n\)且满足下面条件的数列\(A\)的数量。

题解

​ 首先要确定,\(\forall i,a_i=K/K-1\),并且当\(a_i=K-1\)的时候,含义是\(p_i\)在所有最长上升子序列(LIS)中。

​ 设\(p_{b_1},p_{b_2}...p_{b_p}\)为\(P\)中,在所有LIS的数构成的序列(即我们现在有\(p\)个位置\(a_i=K-1\)),然后我们要考虑究竟有多少个\(K\)的取值。

​ 你会发现\(K\)的下界是\(p\)(不然根本不能有这么多必在LIS中的数),然后考虑上界,其实就是在\(p_{b_i}+1\sim p_{b_{i+1}}-1\)中的数,要让这些数形成最大的最长LIS长度,并且还能计算到整个序列的LIS中,而且还不能存在一个出现在所有LIS中的数。要满足以下要求:

​ 所以\(K\)的上界就是\(\sum\lfloor \frac{s}{2}\rfloor\),又可以证明,对于\(\forall K\in[p,\sum\lfloor \frac{s}{2}\rfloor]\),总存在一种构造方案。

​ 所以我们可以枚举\(i=p,j=\sum\lfloor \frac{s}{2}\rfloor\),可以知道奇数段的长度是\(n-i-2j\)(因为只有奇数段才会出现除2下取整使\(i+2j<n\)的情况)

​ 然后我们在所有\(i+1\)中选择\(n-i-2j\)的作为奇数段方案数为\(\binom{i+1}{n-i-2j}\),然后就是将\(j\)个\(2\)放进\(i+1\)个盒子(允许空盒)的方案为\(\binom{i+j}{i}\),\(K\)的取值有\(\max(0,\min(m,i+j)−\max(3,i)+1)\)种,乘起来,再加起来就可以了。

​ 关于上面被证明存在的构造方案:大致构造思路是先将\(K\)分配(貌似是怎么分配都可以,但为了方便,还是选择全分给左边),然后就分配了的一块就按上面的构造方法,没有分配(是一段后缀)的就是一段小的降序序列。

扩展

​ 有没有想过如果题目是给你一个序列,让你求\(A\)怎么办,其实就像给序列分层,设\(f[i]\)表示以\(i\)结尾的LIS长度,那么第\(j\)层相当于所有\(f[i]=j\)的都是这一层的点,然后若这一层只有一个点能够转移到下一层,那么这个\(a_i=K-1\),否则\(a_i=K\)

启发

标签:lfloor,frac,rfloor,LIS,序列,AGC055C,2j
来源: https://www.cnblogs.com/qwq-123/p/15905766.html