AOJ0091 Blur

問題リンク Blur

  • 解法

DFS+枝刈りで解きました。
f(i, j, k, drop): 既にk滴使っている状態でマス(i, j)に大きさdropの滴を落とす
という関数を作っておいて、左上から右下のマスへこの関数を再帰させます。
問題が与えている座標系は(x, y)座標ですが、自分は癖で行列(i, j)で座標を扱ってます。

このままだとTLEするっぽいので、枝刈りを入れます。
f()を左上から右下へ動かすので、(i, j)に大きさ3の滴を落としても届かない上部のマスは、これ以降絶対に滴を落とせません。なので、その部分に染料の量が合っていないマスが存在したら、目標の模様は作れないと決定するので枝を刈ります。

  • ソース
続きを読む

AOJ0260 Salary for a Plumber

問題リンク Salary for a Plumber

  • 解法

ジョイントを1つ使うと、使ったジョイントの長さだけパイプの長さの総和が伸び、パイプの本数が1つ減ります。残ってるジョイントの内、最も長いものを使えば、N-1本における給料が最大になります。ジョイントを使って繋げる2本のパイプは何だって構いません。

  • ソース
続きを読む