Loading

插入最小转移与部分预处理——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\) 这一位可以优化掉。

posted @ 2025-11-11 22:18  lupengheyyds  阅读(3)  评论(0)    收藏  举报