狀態壓縮dp 互不侵犯

2021-10-09 23:05:48 字數 738 閱讀 4042

分析:這道題的n在10以內,又是乙個棋盤問題,問k個國王在棋盤中有幾種放置方式可以達到互不干涉。最先想到的是dp推導,但是如果用乙個二維陣列資料會開的太大,容易超時,因此可以想到狀態dp

狀壓dp:即把一系列只有兩種選擇的情況用0和1來表示,所排列成乙個二進位制字串轉換為十進位制,從而達到壓縮的目的。例如一排燈泡開或不開,1為開0為關,一共5個,可把開關狀態轉換為11011,11000,…等一系列二進位制數。

注意:狀態壓縮一般涉及到位運算,這篇總結的常用的很棒

**如下

```cpp

#include#include#includeusing namespace std;

const double eps=1e-8;

const double pi=3.1415926;

#define ll long long

int n,k;

ll f[10][1<<9][82],ans;//f陣列表示的就是在總共x行的xx狀態下放置***個國王一共有幾種方式

int c(int st)

return cnt; //return __builtin_popcount(st);

}bool check1(int st)}}

} }for(int st=0;st<(1

cout

}

狀態壓縮DP 互不侵犯

做過的題,但是忘了怎麼做,於是當時用的搜尋,搜了60分。三 互不侵犯 king 在n n的棋盤裡面放k個國王,使他們互不攻擊,共有多少種擺放方案。國王能攻擊到它上下左右,以及左上左下右上右下八個方向上附近的各乙個格仔,共8個格仔。輸入檔案 只有一行,包含兩個數n,k 1 n 9,0 k n n 輸出...

題解 互不侵犯

僅僅是筆者對於狀態壓縮類 dp 的初步練習吧。題目鏈結 題目大意 給定乙個 n n 的棋盤,在棋盤上放國王,國王的攻擊範圍是它周圍的八個格仔。求放 k 個國王的合法方案數。本題很像八皇后問題,但是由於搜尋狀態數量太多導致搜尋會超時。我們考慮一下 dp 先考慮狀態設計 裡面首先要包含當前使用的國王數,...

2019 8 31 互不侵犯

在n n的棋盤裡面放k個國王,使他們互不攻擊,共有多少種擺放方案。國王能攻擊到它上下左右,以及左上左下右上右下八個方向上附近的各乙個格仔,共8個格仔。注 資料有加強 2018 4 25 只有一行,包含兩個數n,k 1 n 9,0 k n n 所得的方案數 輸入 1複製 3 2 輸出 1複製 16 題...