题意:洛谷P1896
在 N × N N×N N×N的棋盘里面放 K K K个国王,使他们互不攻击,共有多少种摆放方案。国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共 8 8 8个格子。 ( N < = 9 , K < = N ∗ N ) (N<=9,K<=N*N) (N<=9,K<=N∗N)
分析:
首先暴搜肯定被否定,时间复杂度是指数级的,所以我们就可用上状态压缩 d p dp dp啦。
那什么是状态压缩?在这题中按照我的理解就是将一行的所有摆放状态看成不同的 01 01 01串,然后将这些 01 01 01串看成二进制数,这样每一个摆放状态就有一个 01 串 01串 01串(二进制数)与其对应。
假设 1 1 1行有 4 4 4个格子,我们在第 1 、 3 1、3 1、3个格子放棋子, 2 、 4 2、4 2、4不放棋子,然后我们定义一个 01 01 01串 ′ 1 ′ '1'