狀態壓縮類動態規劃筆記

2022-06-20 06:00:08 字數 517 閱讀 1191

一、問題簡介:

1.狀壓dp:以集合資訊為狀態(下面會解釋)

2.一般dp只需要提取出兩三個資訊對狀態進行轉移,但是如果多個資訊對狀態有影響,我們不能開多維陣列(可能會爆空間),這時候考慮狀壓dp

3.狀壓指對多個狀態進行壓縮

二、問題引入:(旅行商問題 tsp)

乙個n個點的帶權完全圖,求權和最小的經過每個點恰好一次的封閉迴路。

我們只要知道哪些點已經被遍歷過,遍歷的具體順序對於最後結果無影響,設當前位置為i,遍歷過的點的集合為s,轉移方程為:

f[i][s]=min(f[j][s-i]+dist(i,j))

狀壓dp:以乙個集合內的元素資訊為狀態且狀態總數為指數級別的dp

特點:1.資料規模某一維或某幾維非常小

2.最優性原理和無後效性

三、狀壓dp:

(1)前置知識:

1.判斷第i位是否為0 :  (s&(1<2.將第i位設定成1: (s|(1<3.將第i位設定成0: (s&~(1<(2)典型例題:

略~~

狀態壓縮動態規劃

動態規劃的狀態有時候比較難,不容易表示出來,需要用一些編碼技術,把狀態壓縮的用簡單的方式表示出來。典型方式 當需要表示乙個集合有哪些元素時,往往利用2進製用乙個整數表示。一般有個資料 n 16 或者 n 32 這個很可能就是狀態dp的標誌,因為我們要用乙個int的二進位制來表示這些狀態。要注意好這些...

動態規劃 狀態壓縮

這個題目的題意很容易理解,在乙個n m的格仔裡,我們現在有兩種型別的磚塊,1 2和 2 1,問一共有多少種方案,可以將整個n m的空間都填滿。最簡單的例子就是下面的了 程式設計之美中題目 某年夏天,位於希格瑪大廈四層的微軟亞洲研究院對辦公樓的天井進行了一次大規模的裝修.原來的地板鋪有 n m 塊正方...

狀態壓縮動態規劃

我們可以使用乙個01串a來表示乙個集合。對於數x x 0 用ax 0表示它不在該集合中,用ax 1表示它在該集合中。將01串a看作是乙個二進位制數,我們把它轉換為十進位制,就可以使用乙個十進位制整數來表示乙個實際使用二進位制方式表示的集合。這樣,我們可以使用位運算方便地處理集合的操作。交集兩個集合a...