bzoj1087

maksyuki 发表于 oj 分类,标签:
0

1087: [SCOI2005]互不侵犯King

Description

在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案。国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子。

Input

只有一行,包含两个数N,K ( 1 <=N <=9, 0 <= K <= N * N)

Output

方案数。

Sample Input

3 2

Sample Output

16

 

题目类型:状压DP

算法分析:直接搜索由于数据规模比较大,会TLE~~。这里注意到每行之间存在一个递推的关系,考虑使用状压DP来求解。dp[i][j][k]表示前i行摆放k个国王且第i行的状态是j的方案数,这里j进行“状压”来表示状态。首先将不满足条件的状态都删去,只保留满足条件的(相邻格子之间没有1)。然后初始化第一行的状态(很重要的~~,不然算出来的结果都是0),状态转移方程为:

dp[i][j][k] += Sigma (dp[i-1][q][k-cnt[j]]

其中q是能够转移到j的一个状态(合法的),cnt[j]表示状态j所具有的国王数量,最后累加dp[n][所有合法的状态][m]的值即可,注意要使用long long!!!