问题:

求所有的n阶矩阵,使得每个元素的上、下、左、右的位置上的元素(如果存在)之和为偶数。

 

解答:

枚举第一行,根据递推式

x[i][j] = (x[i - 2][j] + x[i - 1][j - 1] + x[i - 1][j + 1]) % 2;

依次计算每一行即可,最后判断最后一行是否满足。

很容易发现,由上述递推式构造出来的矩阵,一定是关于主对角线和副对角线对称的。

更进一步可以得到,无论第一行是什么值,由此递推式得到的矩阵,都是满足条件的矩阵,所以一共有2^n个满足条件的矩阵。

 

PS

这题类似于点亮所有的灯,点亮所有的灯是每个元素的上、下、左、右的位置上的元素(如果存在)加上这个元素本身为偶数,所以要复杂很多。参考:

javascript:void(0)

 

PS:

要证明这个矩阵是对称的,确实不难。

首先,主对角线本身是关于主对角线对称的。

其次,由主对角线的前n-1个元素的上、下、左、右的位置上的元素(如果存在)之和为偶数依次可以推出,与主对角线相邻的两条斜线的n-1个数和n-1个数依次相等,即2条斜线对称。

接着再同理证明旁边2条斜线对称

......

最后同理证明左下角和右上角对称。

所以,整个矩阵关于主对角线对称。

同理,整个矩阵关于副对角线对称。