插入最小转移与部分预处理——CF1988F Heartbeat
插入\(1\)转移与部分预处理——CF1988F Heartbeat
首先是个排列,考虑如何转移。
首先发现前缀最大值与后缀最大值分居 \(n\) 两侧而不影响,所以先考虑一边,设 \(f_{i,j,k}\) 表示 \(1\sim i\) 的排列,\(LIS=j\),有 \(k\) 个上升点的方案数。
一般有两种朴素的转移思路:考虑最后一个位置填什么与考虑 \(n\) 插在哪里。但是会发现,如果考虑最后一个位置难以更新 \(k\),考虑 \(n\),则难以更新 \(LIS\)。
这里可以考虑最小的数,即 \(1\) 插在哪里,可以发现他即易于考虑 \(k\),对 \(LIS\) 的影响又很小。
于是得到方程。
预处理后有转移:
\[\forall n\in [0,N],ans_n=\sum_{i=1}^{n-1}{n-1\choose i}\sum_{j=0}^i\sum_{k=0}^{n-1-i}c_{j+k+(i>0)}g_{i,j}h_{n-1-i,k}
\]
列出每个元素所关联的循环变量:
\[\begin{aligned}
S_c=\{i>0,j,k\}\\
S_g= \{j,k\}\\
S_h=\{n,i,k\}\\
S_{n-1\choose i} =\{n,i\}
\end{aligned}
\]
可以发现 \(S_c\cup S_g\ne U\) 且 \(j\) 仅存在与 \(S_c,S_g\) 中,所以 \(j\) 这一位可以优化掉。

浙公网安备 33010602011771号