狀態壓縮DP之位運算總結

2022-03-24 09:42:58 字數 568 閱讀 8478

介紹

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

常用運算子(都是十進位制數在二進位制下所做的運算,返回十進位制的值)

& : x&y ,與運算, 全1才為1,3(11)&2(10)=2(10)  。

|  : x|y ,或運算,有1即為1  , 3(11)|2(10)=3(11)  。

^ : x^y ,異或運算,不同即為1 , 3(11)^2(10)=1(01)  。

<< : 左移運算子 , x<

>> : 右移運算子 , x>>y ,相當於 x/(2的y次方)   。

常用操作(大多都是根據所想要的推公式)

if(sta[i] | y!=y)  //判斷 sta[i] 狀態是否合法

if(sta[i]&y==0)       //判斷 sta[i]與y是否右重疊

…………

zoj 2297 DP 位運算狀態壓縮

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

狀態壓縮DP總結

參考部落格 狀態壓縮主要指的是用位運算代替列舉壓縮dp的時間,如果某乙個狀態和之前狀態的順序沒有關係,那麼就可以將之前的選或者不選壓縮到乙個二進位制數中。在選擇第i個時列舉之前的所有可能的i 1狀態,但是這i 1狀態是不記錄順序的,只在i 1到i時考慮順序,這樣的話往往能夠節約很多時間。大致題意是從...

壓縮dp的位運算

壓縮dp用到了二進位制位運算上的東西,整理一下基本內容。位運算的幾個基本操作 1 移位 2 按位與 3 按位或 4 非 5 異或 每個都很簡單,c 上都學過,難的實在那幾個巧妙的利用上。1 判斷乙個數二進位制下第i位是0或1 x 1 i 1 0 1 i 1 構造出來 100.後面i 1個0 與x做與...