M 互不侵犯King(壓狀dp)

2021-09-25 11:57:19 字數 750 閱讀 2293

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

左下右上右下八個方向上附近的各乙個格仔,共8個格仔。

input

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

output

方案數。

sample input

3 2sample output

16hint

第一維代表行數, 第二維代表狀態, 第三維代表在第i行選擇j狀態下從第一行到該行已有的國王個數。

dp[i][j][x]的值代表第一行到第i行,第i行選擇j狀態下目前擁有x個國王個數的方案數。

#include #include #include #include using namespace std;

int status[110], num[110];

long long dp[10][110][30];

int main()

cont++;}}

for(i = 0; i < cont; i++)

dp[1][i][num[i]] = 1;

for(i = 2; i <= n; i++)}}

}long long ans = 0;

for(i = 0; i < cont; i++)

printf("%lld", ans);

return 0;

}

互不侵犯king 狀壓dp

在n n的棋盤裡面放k個國王,使他們互不攻擊,共有多少種擺放方案。國王能攻擊到它上下左右,以及左上左下右上右下八個方向上附近的各乙個格仔,共8個格仔。1 le n le 9,0 le k le n n 這道題如果普通dfs肯定會超時。為什麼呢?我們發現一行中的狀態是固定的,同時行與行之間的衝突情況也...

BZOJ 1087 互不侵犯King(狀壓DP)

time limit 10 sec memory limit 162 mb submit 3984 solved 2323 submit status discuss 在n n的棋盤裡面放k個國王,使他們互不攻擊,共有多少種擺放方案。國王能攻擊到它上下左右,以及左上 左下右上右下八個方向上附近的各乙...

BZOJ 1087 互不侵犯King (狀壓dp)

time limit 10 sec memory limit 162 mb description 在n n的棋盤裡面放k個國王,使他們互不攻擊,共有多少種擺放方案。國王能攻擊到它上下左右,以及左上 左下右上右下八個方向上附近的各乙個格仔,共8個格仔。input 只有一行,包含兩個數n,k 1 n ...