演算法模板 SOS DP

2022-05-25 22:27:08 字數 775 閱讀 6078

sos-dp(\(\text\))是用來解決這樣的問題的:

其實就是子集和dp。上面每個\(f[mask]\)裡面包含了\(mask\)所有二進位制子集的資訊。這是一種\(n\log_2 n\)的dp方法。

我們定義乙個dp狀態\(s(mask,i)\)代表\(mask\)子集中只有最靠右的\(i\)位與其不同的狀態。

具體是這樣的:

圖中描述了\(s(10110,4)\)這個狀態和其所有兒子之間的關係。

形象一些解釋就是每次我們求解乙個狀態時,我們只從他的所有子集裡和他只差一位的狀態轉移過來。(眾所周知,如果\(a\subseteq b,b\subseteq c\)那麼\(a\subseteq\) c)。

放一段**:

SOS DP學習筆記

sum over subsets sos dp 給出乙個長度為 2 n 的陣列 a 對於每乙個 mask 2 n 要求計算出 f mask sum a sub 其中 sub in mask 表示 sub mask sub 1.暴力 for int mask 0 mask 1根據定義直接做,列舉所有小...

sosdp(高維字首和)學習筆記

我們先看一維字首和 for int i 1 i n i s i s i 1 那麼二維字首和 for int i 1 i n i for int j 1 j n j s i j s i 1 j s i j 1 s i 1 j 1 這個是根據容斥計算的,維度很高的時候就不行了 我們換一種方法 for i...

匈牙利演算法模板 KM演算法模板

匈牙利演算法模板 時間複雜度為o ve v為二分圖左邊的頂點數,e為二分圖中邊的數目 include includeconst int maxn 1010 const int maxm 20010 const int max 10001 const int inf 1000000000 int li...