問題にチャレンジして、ユーザー同士で解答を教え合ったり、コードを公開してみよう!
step1 では集合をビット列で表す練習をしました。
次は、ビットDPと呼ばれる、集合をビット列で表した動的計画法を学んでいきます。
dp[S] = 色 j (j ∈ S) の花を手に入れるのに必要な費用の最小値入力は以下のフォーマットで与えられます。
N M
C_1 C_2 ... C_M
P_1 P_2 ... P_M
・ 1 行目には、花の色の数を表す整数 N と店の数を表す整数 M が空白区切りで与えられます。
・ 2 行目には、店 i で売っている花の色 C_i が空白区切りで与えられます。
・ 3 行目には、店 i で売っている花の価格 P_i が空白区切りで与えられます。
・ 入力は合計で 3 行からなり、入力値最終行の末尾に改行が 1 つ入ります。
すべての色の花を 1 つ以上手に入れるのに必要な費用の最小値を求めてください。
末尾に改行を入れ、余計な文字、空行を含んではいけません。
すべてのテストケースにおいて、以下の条件をみたします。
・ 1 ≦ N ≦ 14
・ N ≦ M ≦ 500
・ 1 ≦ C_i ≦ N
・ 1 ≦ P_i ≦ 10^9
・ すべての j (1 ≦ j ≦ N) に対して、j = C_i となる i が 1 つ以上存在する(すべての色の花を 1 つ以上手に入れることが可能である)
3 7
1 2 3 2 1 3 3
9 8 6 1 3 2 11
6
6 6
1 2 3 4 5 6
1000000000 1000000000 1000000000 1000000000 1000000000 1000000000
6000000000
14 20
1 4 5 9 7 8 10 4 2 6 5 7 11 1 8 13 12 14 3 12
748091032 923248344 306578263 901959268 881889099 131363705 631804792 192486880 859116 774415753 107366389 237889264 6749527 200817708 418364455 262808036 919218986 857841956 574646143 318335004
5199343541