yukicoder No.758 VVVVV
N×Nの格子点を想定する。
一番左下の格子点を(0, 0), 一番右上の格子点を(N, N)とする。
右向きの(i, j)から(i+1, j)への移動と
上向きの(i, j)から(i, j+1)への移動
のみによって、(0, 0)から(n, n)に移動する経路のうち対角線をまたがない経路数を数えたい。
とくに、上向きの移動から右向きの移動に変化する箇所(山と呼ぶことにする)がk個ある場合の経路数を数えたい。この経路数をN(n, k)と置く。
対角線をまたがないという条件を無視すれば、そのときの(0, 0)から(n, n)への経路のうち山がk個ある経路数は
となる。
これは、山のx座標の選び方とy座標の選び方がそれぞれ通りあるからである。
同様に、(0, -1) から (n, n) への経路のうち山が k 個あるのは
通りである。
このうち、(0, -1) → (0, 0) → (n, n) と移動し y < x なる格子点を (0, -1) 以外で通らない経路を考える。
(0, -1) → (0, 0) の経路は1通りしかないので、この経路数が求めたい値になっている。
この経路は山が k 個あることから↑→の経路の組 k 個に分解できる(谷の存在しない k 個の経路に分解できる)。
分解したそれぞれの経路について、出発点 (0, -1) に近いほうから1, 2, 3, ...,, k と番号を振る。
i 番目の経路について = (上向きの移動回数)-(右向きの移動回数)と置く。
いま、y < x なる格子点を (0, -1) 以外で通らないという条件から、任意の m について
が成り立つ。とくに、m = k のとき
となり、
m = 1 のとき
となる。
(0, -1) → (0, 0) → (n, n) と移動し y < x なる格子点を (0, -1) 以外で通らない経路について、
1, 2, 3,..., k の経路を
1, 2, 3,..., ,k-2, k-1, k
2, 3, 4, ..., ,k-1, k, 1
3, 4, 5, ..., k, 1, 2
4, 5, 6, ..., 1, 2, 3
と順番に循環させたものすべての集合を考えると、それは(0, -1) から (n, n) への経路のうち山が k 個ある経路全体に等しくなることを示したい。
つまり、
であることを示したい。
上の循環させた経路は、y - xが最小となる谷が常にk, 1の間で形成され、その谷ではy - x < 0 であることから、循環させた経路の集合に重複する経路はない。
また、任意の(0, -1) から (n, n) への経路のうち山が k 個ある経路は循環させることで、y < x なる格子点を (0, -1) 以外で通らない経路に帰着できるので上の等式が成り立つ。
(時間があるときに説明を追加する)
(Eulerian Numbers | T. Kyle Petersen | Springerに詳しく載っている。)