排列计数

题目

题目描述

求有多少种长度为 n 的序列 A,满足以下条件:

1 ~ n 这 n 个数在序列中各出现了一次

若第 i 个数 A[i] 的值为 i,则称 i 是稳定的。序列恰好有 m 个数是稳定的

满足条件的序列可能很多,序列数对 10^9+7109+7 取模。

输入格式

第一行一个数 T,表示有 T 组数据。

接下来 T 行,每行两个整数 n、m。

输出格式

输出 T 行,每行一个数,表示求出的序列数

 

前置知识

需要用到错位相排的知识

就是说:有n张信与n个信封一一对应,现在要求每一张信都装错信封的排列个数

现在假设这里有n个信封:

对于第一张信,不妨设它放进了二号信封

那么对于二号信,有两种情况

如果它放进一号信封:

那么就只剩下n-2个的错位相排了

如果它放进了其它信封,那么其实可以等价于:二号信放进了二号信封,其中一号信放进了其它位置,那么这就是n-1的错位相排 

所以

d[i] = d[i-1] + d[i-2]

可是刚刚只是设第一号位放进二号位

对于放进其它地方的情况,就有i-1种

所以:

d[i] = (i-1)*(d[i-1]+d[i-2])

 

题解

所以这就是一个板子题,枚举每一个m的集合再乘上d[n-m]

C(n,m)*d[n-m]

没有代码了

 

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页