競技プログラミング用 知識集積所
O - Matching
最終更新:
sport_programming
-
view
問題
必要知識
ABCのB以下レベルの内容は省略
考え方
まず、DPテーブルの添字にマッチング状態をbitで表したものを取る。
例えばn=5でdp.at(13)なら、13は二進数で01101なので、男性は最初の3人(0人目1人目2人目)、女性はbitに対応する0人目2人目3人目、という3人ずつのマッチング数を意味すると決める。
例えばn=5でdp.at(13)なら、13は二進数で01101なので、男性は最初の3人(0人目1人目2人目)、女性はbitに対応する0人目2人目3人目、という3人ずつのマッチング数を意味すると決める。
そして、例えば入力例1の場合、以下のようにする。
dp.at(0)は、男性0人と女性0人のマッチング数なので、明らかに1。
dp.at(1)は、男性1人(0番)と女性1人(0番)のマッチング。
男性0番は女性0番と相性が悪いのでパス。
よってdp.at(1)は0。
男性0番は女性0番と相性が悪いのでパス。
よってdp.at(1)は0。
dp.at(2)は、男性1人(0番)と女性1人(1番)のマッチング。
男性0番は女性1番と相性がよいので、ここをマッチングさせてみる。
これは残りは男性0人と女性0人のマッチングになるので、dp.at(0)の値である1通りとわかる。
よって、dp.at(2)は1。
男性0番は女性1番と相性がよいので、ここをマッチングさせてみる。
これは残りは男性0人と女性0人のマッチングになるので、dp.at(0)の値である1通りとわかる。
よって、dp.at(2)は1。
dp.at(3)は、男性2人(0番、1番)と女性2人(0番、1番)のマッチング。
男性1番は女性0番と相性がよいので、ここをマッチングさせてみる。
これは残りは男性1人(0番)と女性1人(1番)のマッチングになるので、dp.at(2)の値である1通りとわかる。
男性1番は女性1番と相性が悪いのでこちらはパス。
よって、dp.at(3)は1。
男性1番は女性0番と相性がよいので、ここをマッチングさせてみる。
これは残りは男性1人(0番)と女性1人(1番)のマッチングになるので、dp.at(2)の値である1通りとわかる。
男性1番は女性1番と相性が悪いのでこちらはパス。
よって、dp.at(3)は1。
dp.at(4)は、男性1人(0番)と女性1人(2番)のマッチング。
男性0番は女性2番と相性がよいので、ここをマッチングさせてみる。
これは残りは男性0人と女性0人のマッチングになるので、dp.at(0)の値である1通りとわかる。
よって、dp.at(4)は1。
男性0番は女性2番と相性がよいので、ここをマッチングさせてみる。
これは残りは男性0人と女性0人のマッチングになるので、dp.at(0)の値である1通りとわかる。
よって、dp.at(4)は1。
dp.at(5)は、男性2人(0番、1番)と女性2人(0番、2番)のマッチング。
男性1番は女性0番と相性がよいので、ここをマッチングさせてみる。
これは残りは男性1人(0番)と女性1人(2番)のマッチングになるので、dp.at(4)の値である1通りとわかる。
男性1番は女性2番と相性がよいので、ここをマッチングさせてみる。
これは残りは男性1人(0番)と女性1人(0番)のマッチングになるので、dp.at(1)の値である0通りとわかる。
よって、dp.at(3)は1+0=1。
男性1番は女性0番と相性がよいので、ここをマッチングさせてみる。
これは残りは男性1人(0番)と女性1人(2番)のマッチングになるので、dp.at(4)の値である1通りとわかる。
男性1番は女性2番と相性がよいので、ここをマッチングさせてみる。
これは残りは男性1人(0番)と女性1人(0番)のマッチングになるので、dp.at(1)の値である0通りとわかる。
よって、dp.at(3)は1+0=1。
以下略。
最後は全男性と全女性でのマッチング数を答えればいい。
最後は全男性と全女性でのマッチング数を答えればいい。