#U1617JB3. Cow Tipping
Cow Tipping
农夫约翰偶尔会遇到无聊的青少年,他们在晚上参观他的农场并打翻他的奶牛。一天早上,他醒来发现它又发生了——他的 奶牛以完美的 N×N 方格排列(1≤N≤10)开始夜间放牧,但他发现其中一些现在已经翻倒了。幸运的是,Farmer John 使用拖拉机和叉车的零件建造了一个光荣的机器,Cow-Untipperator 3000,可以一次翻转一大群奶牛,帮助他尽快让所有奶牛重新站起来。他可以将机器应用于他的奶牛网格中的任何“左上角矩形”——一个包含左上角奶牛的矩形子网格。当他这样做时,机器会翻转这个矩形中的每头奶牛,让倒在地上的奶牛重新站起来,但不幸的是,也会让已经站起来的奶牛翻倒!换句话说,机器“切换”矩形中每头奶牛的状态。
Farmer John 认为,通过将他的机器多次应用于适当的矩形集合,他最终可以将所有奶牛恢复到它们应有的、没有倾斜的状态。请帮助他确定执行此操作所需的机器应用程序的最小数量。
请注意,将机器两次应用于同一个矩形是没有意义的,因为这不会对矩形中的奶牛产生净影响。因此,您应该只考虑将机器应用于每个左上角矩形,可能只应用一次。
输入格式(文件cowtip.in):
输入的第一行是整数 N。随后的 N 行中的每一行都包含一个由 N 个字符组成的字符串,每个字符要么是 0(代表一头没有翻转的牛),要么是 1(代表一头翻转的牛)。
输出格式(文件cowtip.out):
请输出 Farmer John 需要使用 Cow-Untipperator 3000 以使所有奶牛恢复站立所需的最少次数。
样例输入:
3
001
111
111
样例输出:
2
在这个例子中,如果 FJ 将他的机器应用于整个奶牛群(这是一个有效的左上角矩形),他会将它们的状态切换为以下状态:
110
000
000
剩下的就是将机器应用于包含两个 1 的左上角矩形,他就完成了。总的来说,这就是只使用了机器2 次。