关于错位排列

  今天弄了一下错位排列,似乎挺简单的。。。

  错位排列问题的描述大致如下:给定n个信封以及n个信,每个信只能容纳在,第i号信需要放在第i号信封里,现在所有信封的位置都是错误的,求不同的错误方案数。

  因为第i号信是不在第i号信封里面的,这样的话我们可以模拟出以下n*n的矩阵(其中1表示信封错误的位置不能是此处):

  1,0,0,0    不难看出来,对于第一行来说我们有3种不同的方案,在某个点被占据时,其所在的排,列,都没有意义了,这样的话我们可以得到3个新的矩阵:

  0,1,0,0    1: 0,0,0  2:0,1,0    3: 0,1,0

  0,0,1,0      0,1,0          0,0,0            0,0,1

  0,0,0,1      0,0,1          0,0,1            0,0,0

  显然这三个矩阵我们可以转化成相同的,那么仅对矩阵1来判断,当其占据左上角的点时,其又产生了一个n=2的n*n的满足题意的新矩阵,那么这就是一个子问题,而不占据左上角的点时,其右上角的点可以转化为1,那么又产生了一个n=3的n*n的满足题意的新矩阵,这是另一个子问题。

  不难得出f[1]=0,f[2]=1;

  那么对于第一行上的每个可占据的点来说,都有其剩余方案数=f[i-1]+f[i-2]

  因此我们就得到了递推式:f[i]=(i-1)*(f[i-1]+f[i-2])

  考虑一下这个递推式的普适性:

    只要满足矩阵中所有为1的点,两两之间均不出现在同一列,且每一行上均有且只有一个点为1,那么我们就一定能够将这个矩阵转化为错位排列的标准矩阵

  因此只要题意满足以下两点,我们均可用该递推式解出

    1、每行、每列上保证有且仅有1个点为1

    2、求方案数

时间: 2024-11-05 12:32:48

关于错位排列的相关文章

全错位排列

全错位排列是由著名数学家欧拉提出的. 最典型的问题是装错信封问题 一个人写了n封不同的信及相应的n个不同的信封,他把这n封信都装错了信封,问都装错信封的装法有多少种? 用a.b.c,d--表示n份相应的写好的信纸,A.B.C,D--表示写着n位友人名字的信封,错装的总数为记作f(n). 假设把a错装进B中,然后接下来我们可以分为两种情况, 第一种是b错装进了A中,那么问题就变为c,d,e-..n-2个信纸放入C,D,E--n-2个信封时完全放错时完全装错有多少种,有f(n-2)种 第二种是b错装

《程序设计中的组合数学》——全错位排列

承接上文,这次以递推的思维,介绍组合学当中一个很经典的问题. 这个问题最开始由瑞士数学家欧拉提出,原始的问题被叫做“装信封问题”,问题的大意就是:有n封信和n封它们各自对应的信封,如果邮递员想要把每封信都放在不属于这封信的信封,那么请问有多少种排法.(这邮递员真无聊)  想必这个问题在中学阶段数学的[排列组合]都有过接触,但是我记忆非常深刻的是,老师讲到这个模型,自己找了一下n = 5的情况就停止了,然后让大家把前面的数字序列背下来.今日故地重游不禁觉得老师教的好坑爹,搞学习还是要亲历亲为自主探

hdoj 2049 不容易系列之(4)——考新郎 【全错位排列】【组合数】

方法如题. 全错位排列 不容易系列之(4)--考新郎 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 21347    Accepted Submission(s): 7857 Problem Description 国庆期间,省城HZ刚刚举行了一场盛大的集体婚礼,为了使婚礼进行的丰富一些,司仪临时想出了有一个有意思的节目,叫做"考新郎

生成所有错位排列的算法

所谓N元错位排列,就是指对应于1,2,--,N的N元排列Im(m=1,2,---,N),满足Im!=m,算法的目的是构造出所有这样的错位排列,依据的基本思想是回溯法,在沿栈向下试探的过程中逐步扩大部分错位排列的规模,当发现无法找到下一个部分错位排列的元素时就向上回溯,继续试探,当栈空间首元素stack[0]==N+1时,表明首元素为2,--,N的所有错位排列已全部试探得到,错位排列生成完毕,退出循环.这里给出算法,该算法生成对应于1,2,---,N的所有N元错位排列 代码(C++) 1 #inc

错位排列及有关例题

求n个数(不相同)错位排列的个数. 何为错位排列?定义如下:对于n的一个排列a1,a2,a3...an. 如何求解错位排列? 考虑动态规划的解法. 前i个元素时如何进行状态转移? (一)首先由于要求错位排列,第i个元素肯定不会放在自己的位置上,故第i个元素的位置有i-1种选择. (二)对于剩下的i-1个元素,选择其中的一个元素k.这时候k有两种选择: 1. 放在第i个元素的位置上,宏观上相当于i与k的位置互换了.而剩下的i-2个元素依然要求错位排列. 2. 不放在第i个元素的位置上,则相当于剩下

[Luogu4921]情侣?给我烧了![错位排列]

题意 题意很清楚 \滑稽 分析 对于每一个询问 \(k\) ,记 \(g(x)\) 表示 \(x\) 对情侣都错开的方案总数,那么答案可以写成如下形式: \[ {ans}_k= \binom{n}{k}\times A_n^k\times 2^k\times g(n-k) \] 考虑如何求 \(g(x)\) (一个错位排列). 考虑第一排,一共有三种情况:两男两女或者一男一女(不配对). 两男:顺次选出两男的方案数为 \(x(x-1)\) ,然后考虑他们的配偶在之后的配对情况: 如果强制不配对,

luogu4931.情侣?给我烧了!(加强版)(错位排列)

题目链接 https://www.luogu.org/problemnew/show/P4931 题解 以下部分是我最开始的想法. 对于每一个 \(k\),满足恰好有 \(k\) 对情侣和睦的方案数为 \[\binom{n}{k} × \binom{n}{k} × k! × 2^k × f_{n - k}\] 其中,\(f_x\) 表示 \(x\) 对情侣坐 \(x\) 排座位且没有任何一对情侣坐在同一排的方案数. 上述式子的意义为:从 \(n\) 对情侣中选出 \(k\) 对作为和睦的,再从

错位排列

问题: 一个人写了n封不同的信及相应的n个不同的信封,他把这n封信都装错了信封,问都装错信封的装法有多少种? 就是hdu2048 Solution: 采用递推的方法 记 \(n\) 个数的错排的方案为 \(f(n)\). 如果我们已经求出来前 \(n-1\) 个 \(f(n)\) ,现在考虑将第一个元素放在第 \(k\) 个元素的位置上,那么会有以下两种情况 第 \(k\) 个元素恰好到了第一个位置,那么对于 \([2,k-1]\cap [k+1,n]\) 内的 \(n-2\) 个元素可以与 \

排列组合

(常考)错位排列 有N封信和N个信封,每封信都不装在自己信封里的排列种数记作Dn,则 D1=0,D2=1,D3=2,D4=9,D5=44,D6=265 一.相邻问题---捆绑法 不邻问题---插空法 对于某几个元素不相邻的排列问题,可先将其他元素排好,再将不相邻元素在已排好的元素之间及两端空隙中插入即可. [例题1]一张节目表上原有3个节目,如果保持这3个节目的相对顺序不变,再添进去2个新节目,有多少种安排方法? A.20 B.12 C.6 D.4 [答案]A. [解析] 以下内容需要回复才能看