題意:給乙個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行種植,最後一...