カメヲラボ

主にプログラミングとお勉強全般について書いてます

Parliament(1)

具体的に解を考えて、書き並べてみる。
入力 N = 5, 6, 7, 8...に対する出力は、


N: List

                                            • -

05: 2 3
06: 2 4
07: 3 4
08: 3 5
09: 2 3 4
10: 2 3 5
11: 2 4 5
12: 3 4 5
13: 3 4 6
14: 2 3 4 5
15: 2 3 4 6
16: 2 3 5 6
17: 2 4 5 6
18: 3 4 5 6
19: 3 4 5 7
20: 2 3 4 5 6
21: 2 3 4 5 7
22: 2 3 4 6 7
23: 2 3 5 6 7
24: 2 4 5 6 7
25: 3 4 5 6 7
26: 3 4 5 6 8
27: 2 3 4 5 6 7
.
.
.

まず、すぐに気付くのはグループ数。2つのグループ数で表すことができるのは、N=5〜8の4つ。3つのグループ数で表すことができるのは、N=9〜13の5つ。4つのグループ数ならN=14〜19の6つ。以下、グループ数が一つ増えるごとに表すことのできるNが一つずつ増えていく。一般的に書くとすれば、グループ数をkとすると表すことのできるNは、k>=2のとき


5 から (k-1)*(k+6)/2+4 まで
ということになる。

それから、3から始まっている解は各グループの一番大きな数と、その次に大きな数だけだということ。

解の決定の仕方も単純で、書くグループの最初は、2から始まるk個の連続する値。次からは、その連続値の大きいものから順に1を加えていく。すべての値に1を加えたら、再び一番大きな(一番右の)値に1を加えて終了する。次回はこの手順でNが27以上の時の解を調べることにする。

つづく