ほぼ静的な計画法

競技プログラミングで解いた問題の解法とコードを晒していくページ。ややマイナーなC♯。

AOJ 0230 (Ninja Climbing : 忍者のビル登り)

【問題】

https://onlinejudge.u-aizu.ac.jp/problems/0230

http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0230

【解説】

幅優先探索。現在のビル、現在の階数、現在までの移動回数をノードとして保持し、キューに突っ込んで幅優先探索していく。

移動先が梯子の場合は、移動先から上方に順次探索し、梯子でない階まで移動させる。同様に移動先が滑る壁の場合、移動先から下方に順次探索し滑る壁でない階まで移動させる。(関数GetDist参照)あらかじめ、どこまで移動するかを事前に求めておく方が処理時間は短くなると思うが、ビルの高さは高々100階のため、都度計算しても処理時間に十分収まった。

【コード】