錯排問題 hdu2048

2021-10-02 10:14:47 字數 1186 閱讀 9141

n個有序的元素有n!種排列方式,如果乙個排列使得所有元素都不在原來的位置上的排列就叫錯排。

(1)錯排有兩種方法進行計算,一種是基於容斥定理最後得出來的乙個階乘的計算式,計算機對於階乘非常的不友好,因此第一種很少使用。

(2)由於階乘的原因,我們不得不再尋找一種計算錯排dn的方法。

首先我們以1,2,3,4的錯排為例子,

(1,2)的錯排唯一,是(2,1)

(1,2,3)的錯排是(3,1,2)(2,3,1)。這兩種都可以看作是(1,2)的錯排的每一位元素和3進行交換位置得到。如圖

(1,2,3,4)的錯排可以表示為

(4,3,2,1) 前三個總結為4與1,2,3,分別換位,另外兩個元素錯排

(3,4,1,2)

(2,1,4,3)

(4,1,2,3) 中間三個是4和3,1,2(1,2,3的錯排一種)每一位進行交換

(3,4,2,1)

(3,1,4,2)

(4,3,1,2) 最後三個是4和2,3,1(1,2,3的錯排的另外一種)每一位進行交換得到

(2,4,1,3)

(2,3,4,1)

由上面可以得到錯排的第二種方法:

從1,2,3…n中任取乙個數字i,分別和其他的n-1個數中的隨便乙個互換,然後剩下的n-2個數字進行錯排,共得到(n-1)dn-2種錯排。還有就是 i 以外的n-1個數字進行錯排,i和n-1的錯排中的每乙個數字進行交換,共得到(n-1)dn-1個錯排。最後結果為二者加起來。

dn = (n-1)(dn-1 + dn-2) (d1 = 0, d2 = 1)

通過這個遞迴公式就能很輕鬆的求出來錯排結果了。

hdu2048

非常直觀的錯排題,只要注意別用int就行了,還需要注意的是再printf中輸出%需要打兩個%%。

#include

#include

using

namespace std;

intmain()

return0;

}

錯排問題 hdu2048

錯排問題 問題 十本不同的書放在書架上。現重新擺放,使每本書都不在原來放的位置。有幾種擺法?這個問題推廣一下,就是錯排問題,是組合數學中的問題之一。考慮乙個有n個元素的排列,若乙個排列中所有的元素都不在自己原來的位置上,那麼這樣的排列就稱為原排列的乙個錯排。n個元素的錯排數記為d n 研究乙個排列錯...

hdu 2048 錯排問題

錯排問題本質上就是乙個動態規劃問題,其狀態轉移方程為 記d n 為n個人錯排情況的總數。那麼策略可以描述為 分析第n個人錯排的可能情況 1 前n 1個人滿足錯排的情況,那麼第n個人加入後還要錯排意味著第n個人與前n 1個人裡的任意乙個交換字條 共有n 1種交換法 2 若前n 1個人並不滿足錯排,但加...

HDU 2048 錯排公式

n n 個人全沒有中獎的概率 發生這種情況的所有可能性 情況總數 我們來想一想全部錯排該怎麼求。假設前n 1 role presentation n 1 n 1個人都完成了錯排,那麼第 n n 個人可以和這n 1 role presentation n 1 n 1個人任意乙個互換,那麼就完成了全部錯...