Closed5
EDPC Y Grid2
EDPC Y Grid2 考察ノート
考察
- よくある、グリッドを右下に向かって移動する経路を数える問題。
- ただし、グリッドサイズが巨大で、壁の配置は疎ら。つまり、座標圧縮が必要。
- 圧縮した場合の数え上げ法をよく考える必要がある。
- 座標圧縮すると行・列の情報が失われてしまい、正しく計算できない。
- 全体
から、壁を通るルートを引くのも無理そう。通る壁の種類と包除原理を組み合わせると計算量が{H+W \choose H} になる。O(N!)
- 壁の数だけで何とかできる?
-
個の壁を通るにはn+1 個の壁を通る必要がある。n -
個以上の壁を通過する場合で包除原理。n 。dp[0] - dp[1] + dp[2] - dp[3] + \cdots - 壁の座標を遷移順にソートすればDPで
で計算できる!O(N^2)
回答
- 投稿時点で最速
- 包除原理の実装に注意が必要。通過する壁の個数ではなく、通過した壁の番号(ソート後)でDPする。
その他
-
を利用すると、階乗の逆数の一覧を\frac{1}{n!} = \frac{n+1}{(n+1)!} でなくO(N\log \mathrm{MOD}) で得られる。O(N + \log \mathrm{MOD})
このスクラップは4ヶ月前にクローズされました