Description
Solution
Part 1: 性质观察
遇到这种输入量非常小的题,我们往往会想到找规律。先用暴力打个表出来试试吧。
1: 1
2: 3 1
3: 10 7 1
4: 41 39 15 1
我们发现,输入 n n n 后对应的答案之和为 n ! n n!n n!n;因此,好序列的数量恰有 n ! n! n! 种。这启发我们将好序列与长度为 n n n 的排列建立双射关系。
考虑构造下面的双射:
- 对于一个好序列 a a a 而言,将 a a a 中的元素从大到小排序;特别的,若两个元素的值相等,那么按照下标从大到小排序。将排序后的序列中的各个元素原来所在的位置依次取出,即可得到一个长度为 n n n 的排列 p p p。
- 对于一个排列 p p p 而言,我们将其划分为若干极长下降区间。对于第 k k k 个下降区间 [ l , r ] [l,r] [l,r], ∀ i ∈ [ l , r ] \forall i \in [l,r] ∀i∈[l,r] 令 a p i = k a_{p_i}=k api=k,即可得到一个长度为 n n n 的好序列 a a a。
因此, a n s i ans_i ansi 即为所有长度为 n n n 的排列的第 i i i 个极长下降区间的长度之和。
Part 2: 列出式子
注意到,对于一个排列 p p p 中的第 i i i 位,其会对 a n s x ans_x ansx 产生贡献当且仅当 [ 1 , i ) [1,i) [1,i) 中恰有 x − 1 x-1 x−1 个位置 k k k 使 p k < p k + 1 p_k<p_{k+1} pk<p

本文探讨了一种利用动态规划和排列组合解决数学问题的方法,通过观察输入与输出之间的规律,建立了好序列与排列的双射关系。通过分析排列的极长下降区间,推导出计算公式,并利用动态规划进行状态转移,最终在O(n^2)的时间复杂度内求解问题。文章还提及了欧拉数在解题过程中的应用。
最低0.47元/天 解锁文章
806

被折叠的 条评论
为什么被折叠?



