SCOI2005 互不侵犯

2022-05-02 08:03:10 字數 1094 閱讀 7078

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

注:資料有加強(2018/4/25)

輸入格式:

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

輸出格式:

所得的方案數

輸入樣例#1:

3 2
輸出樣例#1:

16
由\(n \le 9\)可以看粗應該是個狀壓dp

所以就可以高高興興個設狀態了

用\(f[i][j][k]\)表示前\(i\) 行 最後一行狀態為\(j\)放\(k\)個的方案數

需要兩個函式判斷狀態合不合法還有放置的個數

inline int bitcnt(int x,int ans=0)
用來判斷二進位制中有幾個一(\(x\&=x-1\)是不是很熟悉沒錯就是今年初賽題)

inline bool pd(int x)
這個用來判斷乙個數合不合法(乙個1左右不能有另乙個1)

然後就可以列狀態轉移方程了

\(\displaystyle f[i][j][k]=\sum_f[i-1][l][k-bitcnt(k)]\)

#include#includeusing namespace std;

#define int long long

int mian()

/*子供の時の夢は言えますか

その夢すら 溝に 舍てたのは

*/int f[10][(1<<10)+1][100];

int n,m;

inline int bitcnt(int x,int ans=0)

inline bool pd(int x)

signed main()

} }int ans=0;

for(int i=0;i<=u;++i)ans+=f[n][i][m];

cout

}

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的題是乙個套路 具體實現也基本一樣 就是記錄的狀態...