hitoare日記

たまに書きます

F - Knapsack for All Subsets(AtCoder Beginner Contest 169)

問題リンク

atcoder.jp


問題概要

 省略

解法

Knapsack for All Segmentsの類題。

\(dp[i][j] =\) {\(A_1,...,A_i\)の各部分集合に対する、和がjとなる部分集合の数}

と置いてDPする。

遷移は

\(dp[i+1][j] = 2dp[i][j] + dp[i][j-A_{i+1}]\)

となる。

右辺の第1項は\(A_i\)を含む集合(ただし和には使わない)と含まない集合両方を合わせた遷移、

第2項は\(A_i\)を含む集合で和にも使う場合を考えた遷移に対応する。

提出

https://atcoder.jp/contests/abc169/submissions/13824819

感想

 All Segmentsの方が難しい気がする。