标签:sum 关系 描述 -- strong 枚举 定义 bin 还原
定义好序列为:
设 \(f_p(i)\) 为 “好序列” \(p\) 中 \(i\) 的出现次数,你需要对于 \(i=1,2,3...n\) 求出:
其中 \(S\) 表示好序列构成的集合。
答案对 \(998244353\) 取模。
神仙映射:
对于一个长度为 \(n\) 的排列我们在 \(a_i\) 和 \(a_{i+1}\) 之间根据大小关系插入 <
号和 >
号,然后定义 \(f_{a_i}\) 的权值为前面的小于号数量 \(+1\),可以验证这样生成的序列为好序列:
这是因为考虑连续的 >
号,他们对应的都是相同的权值,他们在我们对应的序列中出现位置单调递减,那么对于一个 <
号,设出现在 \(a_{i},a_{i+1}\) 之间,那么 \(a_i\) 必然是相同的权值中的第一个元素,而 \(a_{i+1}\) 则为此类元素中的最后一个位置,同时显然为 \(a_i<a_{i+1}\) 此限制最严。
类似的,我们对于一个好序列,依次枚举每个权值 \(i\) 然后根据出现的位置从后往前拿出每个权值对应的位置,这样就可以还原我们的排列了,于是每个好序列与一个排列一一对应。
接下来我们对排列考虑此问题,\(f_p(i)\) 更形象化的描述是排列中单调递减的段中的第 \(i\) 个段的元素数量。
现在考虑对于 \(k\) 计算答案,我们依次枚举这个段里面的每个元素,对于元素 \(j\) 他相当于钦定前 \(1\sim j\) 中有 \(k-1\) 个 <
号,然后剩余位置任意贡献即可。
此时内部的权值是任意选/独立贡献的,我们只需要考虑 \(1\sim i\) 中的排列存在 \(k-1\) 个 <
号的方案数然后就可以映射上去了。
设 \(f_{i,j}\) 表示 \(1\sim i\) 的存在 \(j\) 个 <
号的方案数,不难发现答案即为:
\(\mathcal O(n^2)\) 的通过 dp 以预处理 \(f_{i,j}\) 即可通过此版本。
不会。
有空来学吧。咕咕咕。
标签:sum 关系 描述 -- strong 枚举 定义 bin 还原
原文地址:https://www.cnblogs.com/Soulist/p/14012917.html