AOJ 1619 - 弁当作り
解法
制約にと書いてあります。これがすべてです。
が大きいパターンとが大きいパターンで場合分けをします。
なので、実はが、簡単にビットで情報を持つことができます。
が小さいパターン
全探索をします。
それぞれの材料について、その材料を必要としているレシピの集合を前計算で求めておきます。
そして、今回作成するレシピの集合について、先ほどの前計算したものとそれぞれ積集合を計算し、その結果含まれる要素の個数が全て偶数であれば、のレシピの集合を一度に作成することができます。こののうち、要素数が最大のものを求めればよいです。が小さいパターン
bitDPをします。
番目までのレシピを作成し終えて、材料の余りがになるようなレシピの作成方法のうち、作成したレシピの個数の最大値
とすると、番目のレシピを作成した際に使用する材料の集合をとして前計算しておくことで、
という遷移で計算することができます。
はとのxorをとればよいです。
こうすると、が答えになります。
あとは、この計算を繰り返せば答えが求まります。
感想
制約によって場合分けをする発想が無かったので解けませんでした…(それぞれについては、この制約ならいけるのになぁみたいな感じでなんとなくは考えていました)。