介紹
在進行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做與...