light 1011 狀態壓縮dp

2021-07-04 07:57:10 字數 528 閱讀 8127

題意:給乙個n*n的二維陣列,從中選出n個數 要求不能同行同列, 求這n個數最大數的和    狀態壓縮。

每個i+1由上乙個i推出來,這個直接乙個for 搞一下就可以,剩下的就是列舉每個列。開乙個dp[1<<16],二進位制1表示我不在這一列中選取,0表示在這一列選取了數字。

(1《異或表示去掉乙個1,比如1000&1010 = 1000 然後1010^1000 = 0010,這樣就去掉了乙個1 ,就表示我要選擇這列

m-1 就表示換到下一層。

#include #include #include #pragma warning (disable :4996)

using namespace std;

const int max = 1 << 16;

int dp[max],a[20][20],n;

int dfs(int x, int m)

return dp[x];

}int main()

return 0;

}

lightoj 1011 (狀態壓縮dp)

思路 狀態壓縮dp,設dp i j 表示前i行,狀態為j時的最大值,狀態定義為 若前i行中取了第x列那麼j的二進位制位中第x位為1,否則為0,最後答案就是dp n 1 1 n 1 裝態轉移方程就是 dp i j 1 k max dp i j 1 k dp i 1 j mat i k j 1 k 0 ...

狀態壓縮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行種植,最後一...