壓縮dp的位運算

2021-08-11 19:28:05 字數 566 閱讀 2471

壓縮dp用到了二進位制位運算上的東西,整理一下基本內容。

位運算的幾個基本操作:

1、移位(<<   >>)

2、按位與(&)

3、按位或(|)

4、非(~)

5、異或(&)

每個都很簡單,c++上都學過,難的實在那幾個巧妙的利用上。

1、判斷乙個數二進位制下第i位是0或1           (x & (1<<(i-1)))>0

1<<(i-1)構造出來(...100...)(後面i-1個0),與x做與運算;由於其他位都是0,故相當於只有第i位在做與運算,而構造出來的為1,所以相當於只判斷x的第i位。同理,可用(3<<(i-1))、(5<<(i-1))...判斷x的連續幾位。

2、把x的第i位改為1            x=(x |(1<<(i-1)))

同上。3、把x的第i位改為0            x=(x & ~(1<<(i-1)))

~(1<<(i-1))相當於構造出來(111101111)(只有第i位為0)的數,做與運算第i位一定為0.

4、把x二進位制下最靠右的第乙個1去掉     x=(x & (x-1))

狀態壓縮DP之位運算總結

介紹 在進行dp題目分析時,針對狀態或子狀態可以抽象為 0 1 排列組合的題目時,將其 0 1 序列轉化為二進位制數,再而轉換為十進位制數,可以更加便捷的對其進行資料分析處理,減少因為混亂所造成的一些不必要的錯誤。魔鬼往往藏在細節之中。常用運算子 都是十進位制數在二進位制下所做的運算,返回十進位制的...

zoj 2297 DP 位運算狀態壓縮

越來越覺得位運算好神啊。用位運算來儲存每個狀態 include include include include include include include include include include include include include include include includ...

DP 亂搞 位運算

今天的題都這麼。這道題後面會用到逆推。首先得判斷是否有合法方案。而且方案明顯會有很多種,但只需要統計算到這一位時答案有多少個1。設f i j 表示算完i位時,答案裡有j個1.考慮轉移,轉移時對答案產生影響的還有兩位間1位置的交集,也就是f i j a i 1 後1的個數,設它為k。交集中1個數就是 ...