ABC199 E - Permutation (500)
$ dp[i][p] でi番目まで見て含まれている数の集合をpとしたときの場合の数とする
前の方からそれぞれ以下を行う
新たに集合に含める数を決める(jとする)
条件をそれぞれ確認して満たさないものがある場合は行わない
全て満たす場合、$ dp[i][p|(1<<j)] += dp[i-1][p] と遷移する
$ dp[n-1][(1<<n)-1] が答え
枝刈りをしないとTLEするが、枝刈りすると$ \mathcal{O}(N M 2^N)が通る
DPの順番を適切にすると$ \mathcal{O}(N 2^N)になるらしい