组合计数·经典序列问题

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.

posted @ 2016-08-06 22:32  astoninfer  阅读(194)  评论(0编辑  收藏  举报