AOJ 2403 The Enemy of My Enemy is My Friend

概要

問題文

頂点数Nの単純無向グラフが与えられる。 また各頂点には値B_iが割り当てられている。 このとき、頂点0を含む独立集合のうち値の総和の最大値を求めよ。

制約:  1 \leq N \leq 40 ,\ 0 \leq B_i \leq 10^3

解法

半分全列挙+高速ゼータ変換 (想定解法ではないらしい)。

頂点を半分に分けて、0を含む側をV_0、含まない側をVとする。 S \subseteq Vに対して関数ff(S) = 「SがVの独立集合ならば値の総和、さもなくば0」と定めて、 g(T) = \text{max}_{S \subseteq T}f(S)を高速ゼータ変換で求める。

あとはV_0側の独立集合Sを全列挙して\text{sum}(S) + g(Sに接続するVの頂点集合の補集合)の最大値を返せば良い。 計算量はO(\frac{N}{2}2^\frac{N}{2})