1. LA 5092 Permutation Counting
题意:给定$1\sim n$的排列$\{a_1, a_1,..., a_n\}$,满足$a_i > i $的下标$i$的个数称为此排列的$E$值,
例如$\{1,3,2,4\}$的$E$值为$1$,$\{4, 3, 2, 1\}$的$E$值为$2$,给定整数$n$和$k(1 \leq n \leq 1000, 0 \leq k \leq n)$,
求$E$值恰好为$k$的排列个数。
分析:我们可以这样从$1\sim (i-1)$的排列构造为$1 \sim i$的排列:将$i$放在$1 \sim (i-1)$的一个排列的末尾,
再考虑将其分别与$1\sim (i-1)$排列的任一个数交换,便可得到$(1 + i - 1) \cdot (i - 1) ! = i!$个新的排列。由此考虑
将$1\sim i$的排列满足$E$值为$j$的个数设为$dp(i, j)$,那么将数$i$放置在末尾或者与那些已经贡献$1$的位置进行交换总的贡献不变,
反之则加$1$,因此有状态转移:
$dp(i, j) = (1 + j) * dp(i - 1, j) + (i - j) * dp(i - 1, j - 1)$
边界条件:
$dp(i, 0) = 1$
2.
时间: 2024-10-14 09:33:23