狀態壓縮DP 互不侵犯

2021-06-07 15:59:37 字數 1000 閱讀 4857

做過的題,但是忘了怎麼做,於是當時用的搜尋,搜了60分。

三、互不侵犯(king)

在n×n的棋盤裡面放k個國王,使他們互不攻擊,共有多少種擺放方案。國王能攻擊到它上下左右,以及左上左下右上右下八個方向上附近的各乙個格仔,共8個格仔。

輸入檔案:

只有一行,包含兩個數n,k ( 1 <=n <=9,  0 <= k <= n * n)

輸出檔案:

方案數。

sample input

3 2sample output

其實這道題不用那麼麻煩,稍微犧牲一點時間,每一次對上一排都遍歷所有可能的方法,而不用只列舉生成了的狀態,實踐證明,已經夠快了。。而且這樣來思維難度降低了很多

提交次數:3

1、tle60。樸素

2、wa80。沒有用long long

3、ac

#include #include #include long getint()

do rs=(rs<<3)+(rs<<1)+tmp-'0';

while (isdigit(tmp=getchar()));

return sgn?-rs:rs;

}long n,k;

long met[4000];

long cnt[4000];

long long f[10][4000][200];

long mc = 0;

void make(long l,long s,long c)

make(l+1,s,c);

if (!(s&(1<<(l-1))))

make(l+1,s|(1<>1)&met[j])&&

!((met[k]<<1)&met[j]))

f[i][k][c] += f[i-1][j][c-cnt[k]];}}

} }long long ans = 0;

for (long i=1;i

狀態壓縮dp 互不侵犯

分析 這道題的n在10以內,又是乙個棋盤問題,問k個國王在棋盤中有幾種放置方式可以達到互不干涉。最先想到的是dp推導,但是如果用乙個二維陣列資料會開的太大,容易超時,因此可以想到狀態dp 狀壓dp 即把一系列只有兩種選擇的情況用0和1來表示,所排列成乙個二進位制字串轉換為十進位制,從而達到壓縮的目的...

題解 互不侵犯

僅僅是筆者對於狀態壓縮類 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 題...