dp 狀態壓縮

2022-03-10 01:47:20 字數 540 閱讀 3502

之前我們在討論的dp形式當中, 大多數是對整數的動態規劃, 然而對於集合而言呢 ? 我們使用 dfs 嗎, 看起來也可以, 但是加上dp記憶 陣列的 動態規劃效率更高;

那麼進一步討論, 我們如何表示集合元素是否被使用的狀態呢 ? 是通過康拓展開, next_permutation 嗎??? 這個是全排列, 是有些重複的, 在 dfs bfs 當中有一些涉及, 但是我們為什麼不把集合當中的選中與不選中當成兩種狀態呢? 那麼我們可以使用乙個數字, 他的二進位制編碼對應的 0 1來表示集合當中的元素是否被使用了!!

那麼我們就來看挑戰當中的旅行商問題, 對此筆者會加一些便於理解的解析:

首先我們明確: 這裡面的 dp[s][v] 指的是 現在已經訪問過的頂點的集合是s, 當前所在的頂點是 v,由點 v 出發,訪問剩餘的所有頂點, 最終回到頂點 0 所需要的權重最小值

那麼我們就知道  dp [v] [0] = 0;  v 表示的是所有的頂點集合;

那麼dp 陣列元素之間聯絡的關係呢?  dp[s] [v] = min ,  其中 u  不屬於s;

所以說,就產生了以下的**

狀態壓縮DP

首先,我們以一道狀壓經典題tsp來引入。tsp問題 一張圖上有n個點,給定相應的鄰接矩陣,需要求出從0號節點出發,經過且只經過每個頂點一次,最後仍回到0號節點的最小邊權。思路 假設現在已訪問過的頂點集合 起點0當作還未訪問過的頂點 為s,當前所在頂點為v,用dp s v 表示從v出發訪問剩餘的所有頂...

狀態壓縮DP

theme 給定乙個n m的玉公尺田,1 n,m 12。值為0表示不能在該塊種草,為1表示可以。現在要在其上中若干草地,要求任意草地間不相鄰 沒有公共邊 問不考慮草地個數的情況下,有多少種種植的方案?solution 用dp。又範圍很小,所以考慮狀態壓縮dp,另dp i j 表示從前i行種植,最後一...

狀態壓縮DP

總結狀壓dp轉移的方法 若某個狀態下可以對下 1.按二進位制讀入資料 2.列舉所有方案,如果合理 一行中沒有兩兩相鄰的 就儲存 i i 1 3.因為每一層的狀態只受上一層影響,因此迴圈兩次所有合理方案,為每乙個方案找到一系列下一層合理方案 4.遍歷每一行,並遍歷每一行的所有合理方案,若與預處理不矛盾...