全錯位重排

2021-08-15 13:25:48 字數 2687 閱讀 2180

乙個人寫了

n封不同的信及相應的

n個不同的信封,他把這

n封信全都裝錯了信封,問都裝錯信封的裝法有多少種?

將這n封信從1到n進行編號得到1、2、3……號碼,同理將信封也從1到n進行編號,將n封信與信封錯位的方法記作s。

1.當n=1時,由於只有1封信,所以無論如何都不會錯位,所以此時s=0;

2.當n=2時,只能將1號信裝進2號信封,2號信裝進1號信封,因而s=1;

3.當n=3時有(此處的編號為信的編號,所在位置為信封的編號):①3 1 2

②2 3 1

故此時s=2;

4.同理可以推出s=9;

……當n較小時我們可以通過和上面一樣列舉得到,,n=6時就已經是256了,列舉時一不小心錯了一種就會翻車,所以當n比較大時列舉就行不通了,接下來就看下遞推數列法:

顯然d1=0

,d2=1

。當n>=3

時,不妨設

n排在了第

k位,其中

k≠n,也就是1<=k<=n-1

。那麼考慮第

n位的情況。

·  當

k排在第

n位時,除了n和

k以外還有

n-2個數,其錯排數為

dn-2

。·  當k

不排在第

n位時,那麼將第

n位重新考慮成乙個新的「第

k位」,這時的包括在內的剩下

n-1個數的每一種錯排,都等價於只有

n-1個數時的錯排(只是其中的第

k位會換成第

n位)。其錯排數為

dn-1

。所以當

n排在第

k位時共有

dn-2

+dn-1

種錯排方法,又k有從

1到n-1共

n-1種取法,我們可以得到:

dn=(n-1)(dn-1+dn-2)

得到遞推的公式之後,我們再通過累加法可以推得全錯位重排的通項公式為:

dn=n!*(1/0!-1/1!+1/2!-1/3!+……+(-1)^n/n!)

然後將其簡化(供參考)可得dn=[n!/e+0.5],其中e是自然常數,為向下取整。

對於該簡化公式可以通過e的麥克勞林展開式(泰勒公式)推導出來:

e^x =1+x+x^2/2!+x^3/3!+

……+x^n/n!

+ rn(-1)

其中rn(-1)

是餘項,等於

(-1)^(n+1) * e^u / (n+1)!,且u

∈(-1, 0).

所以,d(n) = n! *e^(-1) - (-1)^(n+1) * e^u / (n+1), u

∈(-1, 0).

而|n! rn| =|(-1)^(n+1) * e^u / (n+1)| = e^u / (n+1)

∈(1/[e(n+1)], 1/(n+1))

,可知即使在

n=1時,該餘項(的絕對值)也小於

1/2。

這題還可以通過容斥定理推出:

正整數1,2, 3, ……, n

的全排列有

n! 種,其中第k位是

k的排列有

(n-1)!

種;當k

分別取1, 2, 3, ……, n

時,共有

n*(n-1)!

種排列是至少放對了乙個的,由於所求的是錯排的種數,所以應當減去這些排列;但是此時把同時有兩個數不錯排的排列多排除了一次,應補上;在補上時,把同時有三個數不錯排的排列多補上了一次,應排除;

……;繼續這一過程,得到錯排的排列種數為

d(n) = n! - n!/1! + n!/2! - n!/3! + … + (-1

)^n*n!/n!= ∑(k=2~n) (-1)^k * n! / k!,

這與我們上面通過遞推得到的形式相同!

下面我們就來看一道全錯位重排的題吧~(也是全錯位重排的遞迴**)

題目描述:

在家好冷!

又多冷呢?

大概是零下e度!

為什麼是零下e度呢?

不知道,因為我編不下去了。

求給定乙個數n,求出最接近n!/e的整數

輸入描述:

一行乙個整數n1<=n<=10^8

輸出描述:

一行乙個整數,即題目描述中所求,由於這個數字可能很大,我們只需要知道mod998244353後的結果(出題人負責任地告訴你,這個數字是個質數)

示例1輸入6輸出

265示例2

輸入87

輸出158005593

示例3輸入

16777216

輸出16065816

解析:本題的n!/e就是錯位重排的簡化公式去掉餘項,因而可以通過遞推得到。我一開始是想靠打表過的,最後發現自己的空間一直比題目限制的大1k,看了別人的**之後才發現並不需要打表,就在輸入後面用for即可,emmmm

下面是我的**:

#include using namespace std;

int n;

int main()

else if(n==2)

else

printf("%lld\n",ans);}}

}

全錯位排列

給你看道幾乎一樣的題目 五個編號為1 5的小球放進5個編號為1 5的小盒裡面,全錯位排列 即1不放1,2不放2,依次類推 一共有多少種放法 這是著名的信封問題,很多著名的數學家都研究過 瑞士數學家尤拉按一般情況給出了乙個遞推公式 用a b c 表示寫著n位友人名字的信封,a b c 表示n份相應的寫...

全錯位排序公式推導

全錯位排列被著名數學家尤拉 leonhard euler,1707 1783 稱為 組合數論的乙個妙題 的 裝錯信封問題 的兩個特例。裝錯信封問題 是由當時最有名的數學家約翰 伯努利 johann bernoulli,1667 1748 的兒子丹尼爾 伯努利 danidbernoulli,1700 ...

組合數學 全錯位排序公式

problem description 大家常常感慨,要做好一件事情真的不容易,確實,失敗比成功容易多了!做好 一件 事情尚且不易,若想永遠成功而總從不失敗,那更是難上加難了,就像花錢總是比掙錢容易的道理一樣。話雖這樣說,我還是要告訴大家,要想失敗到一定程度也是不容易的。比如,我高中的時候,就有乙個...