F 10歳の動的計画 原案:吉里 解答作成:吉里、渡部 解説:吉里 問題(要約) (0,0)から(N,M)まで(1≦N,M≦100,000) →(+1,0),↑(0,+1),←(-1,0),↓(0,-1)の 4種類の動きを組み合わせて移動する。 移動のしかたは何通りあるか。 10億7(素数)で割った余りを答えよ。 ただし、←(-1,0),↓(0,-1)を合計 ちょうどK回(1≦K≦10,000)使うこと K回使い切る前に(N,M)にたどりついても ゴールしたとみなさず動き続ける。 (X座標またはY座標が負の点に入るような移動はできない) 想定解法1/6 条件:←(-1,0),↓(0,-1)を合計K回使う ←を使う回数で場合分けして、全部足す。 ←をp回、↓をK-p回使う、とする。 (p=0,1,2,……,K-1,Kについて和をとる) 想定解法2/6 X方向の移動とY方向の移動は それぞれ独立に考えたうえで あとで統合すればよい。 (←→計a個を並べる場合の数) ×(↑↓計b個を並べる場合の数) ×(a+b)Ca 想定解法3/6 ・残された問題 →N+p個と←p個を並べる (ex.→←→→←←……) ただし、X座標が負の点には入れない (∀i, ←がi回出る前に→がi回以上出る) この「ただし」をどう扱うか? 想定解法4/6 →か↑に進んで、S⇒Gを目指す問題を考える 「S⇒Gの、赤丸を通らないルートの総数」 =「S⇒Gのルートの総数」- 「S⇒Gの、赤丸を通るルートの総数」 =「S⇒Gのルートの総数」- 「S⇒G’のルートの総数」 想定解法5/6 「初めて赤丸を通った点」に注目して、 以後、反転した動きをすれば Gの代わりにG’に着く 想定解法6/6 →N+p個と←p個を 「←がi回出る前に→がi回以上出る」 ように並べる場合の数 = (N+2p)Cp × (N+1)/(N+p+1) コンビネーションの値は p=iの値があればp=i+1の値計算はO(1) 補足 MOD.p(pは素数)の世界では、 (÷a)と、(×a^{p-2})は等価 (証明) フェルマーの小定理(aとpは互いに素) a^{p-1}≡1 (mod.p) (pは素数) a^{p-2}は、繰り返し二乗法でO(logp).
© Copyright 2025 ExpyDoc