CodeIQ 挑戦の記録 : 今週のアルゴリズム : 第85回「隣り合えないカップル」
CodeIQというサイトで問題に挑戦した記録です。
問題文を要約すると下記の通り、
- 組のカップルを男女交互に円形に並べる事を考える。
- カップルが隣同士に並ばないパターンの総数を解答する。
- 円形なので回転したものは同じと見なすが、逆順は別とカウントする。
方針
メモ化再帰を用いる
人数人の女子を円形に並べ、その間にカップルが隣りあわない様に人の男子を並べる配置を考える。
女子の組と添え字番号が同じ男子の組をカップルとして、添え字と
( 番目はと1周して)以外の位置に男子を配置する全パターンをメモ化再帰により数える。
これに、女子の円順列の総数を掛けて解答とする
提出したコード (Ruby)
数学的な解法
上記のコードを提出した後、色々と調べてこの問題が「menage problem」(正しくはフランス語表記)という数学の典型問題だと知った。
下記の英語のページに式の記載があるが簡単な式ではなかった。ご参考まで
Menage problem
では、
Sponsored Link