SCOI2005 互不侵犯

2022-05-20 18:51:10 字數 874 閱讀 6368

題目大意:

給你乙個n*n的棋盤,讓你往上面放國王,讓它們不會互相攻擊。

問有幾種方案?

思路:狀壓dp。

類似於bzoj1725,不過現在沒有要求**一定不能放,但是斜著也不能相鄰了。

用f[i][j][k]表示第i行狀態為j,總共放了k個國王。

轉移的時候枚舉行數i,當前行狀態j,上一行狀態l,上一行總共放的棋子數k。

判斷是否合法並轉移即可。

顯然這題打表也可以做,然而dp還是能成功地跑到0ms,在洛谷上是最快的非打表程式。

1 #include2 #include3 #include4 typedef long

long

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