[問題]M個交易員在圓桌旁圍坐一圈,將N(N < M)個交易品種分配給他們研究。每人分配一個,要求相鄰的兩我的所分配到的交易品種不相同。編程計算共有多少種分配方式編程
[解析]將圓桌抽象成一個圓,將交易員抽象成圓上的一個個小球(相似於項鍊),將分配M個交易品種抽象成分配M種顏色。從任意一個球開始,將其編號爲1。對於1號球,有M種顏色分配方案。設n個球中的第1個球的顏色設定後,還有F(n)種顏色分配方案,則顏色分配方案的總數爲M * F(N).遞歸
下面來求F(N)。從1號球開始選定3個球,分別編號爲一、二、3.下面分兩種狀況討論:動態規劃
(1)若是3號球與1號球顏色相同,則一、二、3這3個球共有M-1種顏色分配方案。此時對於剩下的球,能夠將一、2兩球去掉,只保留3號球。這樣就有F(N-2)顏色分配方案。因此第一種狀況下顏色分配方案的總數爲(M-1) * F(N-2)顏色
(2)若是3號球與1號球顏色不一樣,則一、二、3這3個球共有(M-1) * (M-2)種顏色分配方案。此時對於剩下的球,能夠將2號球去掉,只保留一、3兩球。設n個球中的前兩個球的顏色設定後,還有f(n)種顏色分配方案,這樣就有f(N-1)顏色分配方案。因此第二種狀況下顏色分配方案的總數爲(M-1) * (M-2) * f(N-1)
下面來求f(N)。將最開始的3個球編號爲一、二、3,仍然分兩種狀況來討論。
a.若是3號球與1號球顏色相同,則一、二、3這3個球共有1種顏色分配方案。此時對於剩下的球,能夠將一、2兩球去掉,只保留3號球。這樣就有F(N-2)顏色分配方案。因此第一種狀況下顏色分配方案的總數爲 F(N-2)
b.若是3號球與1號球顏色不一樣,則一、二、3這3個球共有(M-2)種顏色分配方案。此時對於剩下的球,能夠將2號球去掉,只保留一、3兩球。這樣就有f(N-1)顏色分配方案。因此第二種狀況下顏色分配方案的總數爲(M-2) * f(N-1)
綜上所述,遞推式以下:
F(N) = (M-1) * F(N-2) + (M-1) * (M-2)* f(N-1)
f(N) = F(N-2) + (M-2)* f(N-1)
得出遞推式以後,便可用遞歸或者動態規劃來編程實現。遞歸截止條件爲:
F(1) = 1
F(2) = M - 1
f(2) = 1