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