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