AOJ 1321 - Captain Q's Treasure

ICPCアジア地区予選に向けて

問題

h×wのマップが与えられる
セルの意味は以下

  • 数字セル:9近傍に宝がその数字の数だけ埋まっている
  • '*':宝が埋まっているかもしれない
  • '.':何も埋まってない

このとき埋まっている宝の数は最小でいくらか

制約

1<=h,w<=15
1<=数字セルの数<=15

解法

数字セルの9隣接を順に宝が埋まっているとするかしないかを決めていく。
i番目の数字セルの値をnum[i]とする。
あるセルに宝が埋まっていることにしたら、その9隣接にある数字セルのnum[i]を1小さくする
状態は

  • どこまでセルを見たか(最大15*9)
  • num[i](最大10^15)

終了条件は

  • num[i]が全て0

高速化

  • num[i]はlong longにエンコードする。
  • mapでメモ化
  • 今後見るセル全て宝が埋まっていることにしても、num[i]が0にならないものがあれば枝刈り
  • 探索順を工夫