題目大意:
給你乙個n*n的棋盤,讓你往上面放國王,讓它們不會互相攻擊。
問有幾種方案?
思路:狀壓dp。
類似於bzoj1725,不過現在沒有要求**一定不能放,但是斜著也不能相鄰了。
用f[i][j][k]表示第i行狀態為j,總共放了k個國王。
轉移的時候枚舉行數i,當前行狀態j,上一行狀態l,上一行總共放的棋子數k。
判斷是否合法並轉移即可。
顯然這題打表也可以做,然而dp還是能成功地跑到0ms,在洛谷上是最快的非打表程式。
1 #include2 #include3 #include4 typedef longlong
int64;
5 inline int
getint()
12const
int n=9,k=26
;13 int64 f[2][1
<14int
main()
24for(register int l=0;l<(1
<)
28if((j&l)||((j>>1)&l)||((j<<1)&l)) continue;29
for(register int k=__builtin_popcount(l);k<=((n+1)>>1)*((n+1)>>1);k++)
33next_l:;34}
35next_j:;36}
37}38 int64 ans=0;39
for(register int j=0;j<(1
<)
42 printf("
%lld\n
",ans);
43return0;
44 }
SCOI2005 互不侵犯
在n n的棋盤裡面放k個國王,使他們互不攻擊,共有多少種擺放方案。國王能攻擊到它上下左右,以及左上左下右上右下八個方向上附近的各乙個格仔,共8個格仔。只有一行,包含兩個數n,k 1 n 9,0 k n n 方案數3 2 同sgu223 include include include include ...
SCOI2005 互不侵犯
題目描述 在n n的棋盤裡面放k個國王,使他們互不攻擊,共有多少種擺放方案。國王能攻擊到它上下左右,以及左上左下右上右下八個方向上附近的各乙個格仔,共8個格仔。輸入格式 只有一行,包含兩個數n,k 1 n 9,0 k n n 輸出格式 所得的方案數 ly最可愛啦 這題。想了5分鐘,寫了10分鐘,調了...
SCOI2005 互不侵犯
在n n的棋盤裡面放k個國王,使他們互不攻擊,共有多少種擺放方案。國王能攻擊到它上下左右,以及左上左下右上右下八個方向上附近的各乙個格仔,共8個格仔。兩個數n,k 1 n 9,0 k n n 方案數。3 2果然啊 狀壓題都是乙個套路 和前面那個noi的題是乙個套路 具體實現也基本一樣 就是記錄的狀態...