记述
P1155 [NOIP2008 提高组] 双栈排序
数学限制与二分图的转化
先保证合法,再考虑构造,减少讨论
如果存在 \(j<i<k\land a_i<a_j<a_k\),则 \(i,j\) 不能放在一个栈中,连边 \((i,j)\),输入合法当且仅当构成二分图。
接着构造方案,每次插入前先看字典序比其小的弹出操作能否进行即可。
P9870 [NOIP2023] 双序列拓展
dp与网格路径的转化
考虑最值
将DP转移的过程看作网格图的一条转移路径,在这上面找到特殊性质,分治解决。
2024.10.2T4 逆序图
特殊生成的图与序列的转化
元素积之和等于元素和之积
观察整个生成的过程,不难看出一个连续快一定是序列的一段,于是这就变成了一个序列计数问题。
可以考虑套路的枚举最后个连续段 \(j+1\sim i\),因为 \(1\sim j\) 的所有元素都小于 \(j+1\sim i\),前面就是两个完全独立的子问题。设答案为 \(f_n\),则:
\(g_i\) 表示大小为 \(i\) 的联通段方案权值之和, \(h_{i}\) 表示大小为 \(i\) 的联通段个数。
这三部分分别表示:这一个选并且前面选了,这一个不选并且前面选了,这一个选了并且前面不选。
考虑如何求解 \(g,h\)。
\(h\) 的求法十分套路,求联通图的个数等于总个数-不连通的个数。不连通说明可以划分为多个连通块,于是枚举第一个连通块。 \(h_{i}=i!-\sum_jh_j(i-j)!\)
\(g\) 的求法也类似,以总方案数减去不合法的方案数,\(g_i=sval_i-\sum_j(f_jsval_{i-j}-g_{j}(i-j)!)\),计算原因:一段权值,算重的既有前面的,又有后面的,\(f_i\) 为后面权值算重次数,\(sval_{i-j}\) 为算重的权值,\(g_i\) 为前面算重的权值,\((i-j)!\) 为算重的次数。\(sval_i\) 为不顾连通性的方案和(所有可能的选取方案和)。

接下来考虑如何计算 \(sval_i\),简单的为所有的权值 \(\times\)出现的个数。
转移为 \(sval_i=\sum_jF_j\times(i-j)\times {2\choose i}\times (i-2)!\),\(i-j\) 为权值选择方案,\({2\choose i}\) 为数列位置选择方案,\((i-2)!\) 为剩下位置随便选。
复杂度 \(\mathcal O(n^2)\)。听说可以用 FFT 优化到 \(\mathcal O(n\log n)\)。
P1758 [NOI2009] 管道取珠、
组合意义的应用
将 \(\sum a_i^2\) 看作两种方案相同的方案数,就可以转移了

浙公网安备 33010602011771号