過去ログ

けーすけ
一般化にトライしてみました。

横n列、縦n行の格子点のうち1行で
2箇所を選ぶ選び方は、
 nC2=n(n-1)/2
通りで、これをなるべくn行で均等に分ける場合が
最も碁石を多く使うことになります。(証明省略)
 1行平均 (m-1)/2n個

各行にp個またはp+1個の碁石を配置するとすれば、
 pC2 ≦ (n-1)/2 < (p+1)C2
 → p(p-1) ≦ (n-1) < p(p+1)
1/4を加えて因数分解すると、
 (p-1/2)^2 ≦ n-3/4 < (p+1/2)^2
 → p = Int{1/2+√(n-3/4)}
となります。
(Int:小数点以下切り捨て)

各行p個の碁石で網羅出来ないパターン(碁石2個の組み合わせ)は、
 n(n-1)/2 - np(p-1)/2
通りで、その差を埋めるため、1行1個ずつ碁石を増やしていきます。

碁石を1個増やす行数をq行とします。
1行の碁石をp個→(p+1)個に増やす場合、碁石2個の組み合わせは
p通り増えるので、
qは上記網羅出来ないパターン数をpで割った数になります。
(余り切り捨て)
 q = Int{n(n-1)/(2p)-n(p-1)/2}

上記を用い、碁石の数の合計は、
 np+q
となります。

検証すると、
 n  p  q 碁石の数
  3 2 0 6
4 2 1 9
5 2 2 12
6 2 4 16
7 3 0 21
8 3 1 25
・・・・
 100 10 45 1045
   11月21日(木) 20:46:31     41135

過去問題一覧へ戻る