1. 程式人生 > >錯位排列

錯位排列

hdu markdown mar 進行 方案 lin 個數 ref 一個人

問題:

一個人寫了n封不同的信及相應的n個不同的信封,他把這n封信都裝錯了信封,問都裝錯信封的裝法有多少種?
就是hdu2048

Solution:

采用遞推的方法
\(n\) 個數的錯排的方案為 \(f(n)\)
如果我們已經求出來前 \(n-1\)\(f(n)\) ,現在考慮將第一個元素放在第 \(k\) 個元素的位置上,那麽會有以下兩種情況

  1. \(k\) 個元素恰好到了第一個位置,那麽對於 \([2,k-1]\cap [k+1,n]\) 內的 \(n-2\) 個元素可以與 \(1,k\) 不相關地進行錯排,即 \(f(n-2)\) 種。
  2. \(k\) 個元素不在第一個位置,可以將第一個位置看成第 \(k\)
    個元素的“歸宿”,那麽“第 \(k\) 個元素不在第一個位置”就又是一個錯排,這樣一來,對於 \([1,k-1]\cap [k+1,n]\) 內的元素滿足錯排的方案為 \(f(n-1)\) 種。

由於 \(k\in [2,n]\),所以最後的遞推式為 \(f(n)=(n-1)[f(n-1)+f(n-2)]\)

錯位排列