GH题解
对于一个n×n的棋盘,我们在上面放置了k个半皇后(行和列互不相交)
假设我们使k个棋子占据前k行和前k列,那么就只剩余一个(n−k)×(n−k)的棋盘
假设这个棋盘的所有格子都可以被半皇后的斜线攻击到
那么我们棋子个数的理论下界需要满足的条件就是(n−k)×2−1≤k
即k≥32n−1
但是你无法证明理论下界一定成立
那么我们此时就需要找出一种构造方式或用其他的方式求出实际下界
这时我们就可以先提交easy version来判断理论下界是否就是实际下界
(自己判断当然也是可以的
构造方式需要大家自己去摸索,这里提供一种出题人的思路:
前(k+1)/2个棋子:(i,i×2−1)
后k/2个棋子:(i+(k+1)/2,i×2)
这里提供一种来自验题人的更优解:
- 我们用这k枚皇后,占据棋盘的前k行和前k列。那么剩下的 (n−k)×(n−k) 大小的棋盘,其***有 2(n−k)−1 条对角线需要占据。
- 对于前 k 行和前 k 列,我们把它分成三个部分:
- 第一部分,前 (n−k) 行和前 (n−k) 列:我们在前 (n−k)×(n−k) 的矩形区域内的右上至左下的对角线上的格子放置皇后;
- 第二部分,第 (n−k+1) 行至第 2(n−k)−1 行, 第 (n−k+1) 列至第 2(n−k)−1 列:类似的,我们在这部分中间的矩形区域内的右上至左下的对角线上的格子放置皇后;
- 第三部分,第 2(n−k) 行至第 k 行, 第 2(n−k) 列至第 k 列 :在这部分对应的矩形区域内挑一条你喜欢的对角线放皇后。