做過的題,但是忘了怎麼做,於是當時用的搜尋,搜了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 題...