有一个Nx的矩阵M,每个元素为0或1。我们选择一个特定的r,c(例如1<=r<=N和1<=c<=M),然后从(0,0)到开始(r-1,c-1),切换值。也就是说,0变得1和1变0。
N
M
0
1
r
c
1<=r<=N
1<=c<=M
(0,0)
(r-1,c-1)
基本上,每个“ 移动 ”都是在原始矩阵 的左上角 任意子矩阵中切换所有值。
我需要编写一个函数来计算 最小 移动数,以使矩阵的所有元素最终都为1,但不知道如何做。请帮忙。
例如,在以下矩阵(N == 2和M == 4)中:
0 1 0 0 1 0 0 1
完成移动后,(2, 1)我们将得到以下矩阵:(请注意第一列中切换的值,其余矩阵中未更改的值。)
(2, 1)
1 1 0 0 0 0 0 1
以下应该给你一个想法。
如果从右下角开始,然后向后遍历矩阵,则可以获得“移动”的数量。
让我们move(r,c)按上的按钮进行呼叫r,c。
move(r,c)
r,c
因此,例如,如果N-1,M-1输入为零,那么您将必须在处按一个按钮N-1,M-1。随后,所有条目将被切换。
N-1,M-1
现在,您可以向后检查最后一行中的每个条目。随后,将最后一列中的每个条目向后检查。
不必实际切换所有条目,而是可以对遍历行时切换“列”的次数和遍历列时切换行的次数进行计数。
现在将N减1,将M减1,然后重复。每个条目的现值应为: Original value ^ number of times its column has been toggled ^ number of times its row has been toggled&1。
Original value ^ number of times its column has been toggled ^ number of times its row has been toggled