题目:互不侵犯
题目描述
在 N*N 的棋盘里面放 K 个国王,使他们互不攻击,共有多少种摆放方案。国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共 8 个格子。
输入
只有一行,包含两个数 N, K。
输出
所得的方案数。
输入样例
1 | 3 2 |
输出样例
1 | 16 |
思路
关于 状压dp
状压dp是动态规划的一种,通过将状态压缩为整数来达到优化转移的目的。
具体来说,我们可以用一个二进制数的每一个二进制位来表示一个位置的状态,在这个题中,我们就可以用 0 来表示该位置不放置国王,用 1 来表示该位置放置国王
因为棋盘是一个 N*N 大小的矩阵,我们就可以每一行用一个二进制数来表示该行国王的放置情况
具体操作
见代码注释
代码
这里是本蒟蒻的代码~
1 | #include <iostream> |
感谢观看~