AOJ 1176 - 輪番停電計画
解法
はじめに、2次元累積和を用いて、ある長方形の範囲の需要の合計をで求めることができるようにしておきます。
ここから、DPを行います。
長方形の左上が,右下がとなるような範囲のグループの分け方の最適解
とします。最適解、なのでグループ数と予備力の2つの情報を持ち、グループ数、予備力、の優先順位でより値が大きいものが最適解となります。
そもそもですが、左上が,右下がとなるような範囲を停電させても供給力が足りない場合、すなわち
ならば、答えはありません。
それ以外の場合を見ていきます。
答えの候補ですが、
今見ている範囲をこれ以上分割しない
今見ている範囲をある縦線で区切る
今見ている範囲をある横線で区切る
の3パターンになります。全ての候補を調べ上げ、その中での最適解を選べばよいです。
一番最初のパターンは、グループ数がもちろん0、予備力はそのものです。
また、2つめのパターンと3つめのパターンでは、縦横が異なるのみで操作自体は同じなので、今回は横線で区切るパターンを見ていきます。
左上が,右下がとなっている範囲を横線で区切ると、
左上が,右下がと、左上が,右下が
の2つの範囲に分割されます。
まずは、それぞれの範囲の最適解を調べます。これは、再帰的に調べればよいです。
あとは、2つに分けた範囲それぞれのグループ数の和と、2つに分けた範囲それぞれの予備力のうち小さい方をセットにすれば、今見ている左上が,右下がの範囲の答えの候補になります。
後は適当にメモ化再帰を行えば、答えを求めることができます。
感想
条件がややこしかったり次元が大きかったりしましたが、丁寧に詰めたのでさらっと解くことができました。
多少複雑な問題でも頭が真っ白にならないようにしたいですね。