Educational Codeforces Round 52 - D. Three Pieces

駒が3種類あるので、各girdを拡張させて (h, w, piece)として考えましょう。頂点数はせいぜい300です。

距離の定義を \{手数, 変換\}とすると、これを辞書順最小にしろという問題になります。

となるとワーシャルフロイドが十分に間に合うので、ワーシャルフロイドをしましょう。(各始点について01bfsにすると計算量が結構さがるのでそれでもいいと思います)

あとは dp[i][j] = 今見てる数字がiで駒の種類がjの時にかかる距離の最小値 とすればワーシャルフロイドの結果を用いて素直に遷移できます。

提出コード

codeforces.com

まとめ

ワーシャルフロイドのグラフつくるパートがめんどくさかった…