#3517. cowtip

cowtip

USACO 2017年一月比赛,铜牌

农夫约翰偶尔会为那些深夜造访他的农场并把奶牛推倒的无聊青少年感到烦恼。一天早晨,他醒来发现这件事又发生了——他的 N² 头奶牛原本在夜间以一个 N×N 的完美正方形网格放牧(1 ≤ N ≤ 10),但他发现其中一些奶牛现在被推倒了。

幸运的是,农夫约翰用他拖拉机和叉车上的零件建造了一台辉煌的机器——Cow-Untipperator 3000(奶牛翻正机 3000),它可以一次性翻转一大群奶牛,帮助他尽快将所有奶牛恢复站立状态。他可以将这台机器应用于网格中的任何一个 “左上角矩形” ——即包含左上角奶牛的一个矩形子区域。当他这样做时,机器会翻转该矩形内的每一头奶牛:被推倒的奶牛会恢复站立,但不幸的是,原本站立的奶牛也会因此被推倒!换句话说,机器会 “切换” 矩形内每头奶牛的状态。

农夫约翰认为,通过将机器足够多次地应用于适当的矩形集合,他最终可以将所有奶牛恢复成正确、未推倒的状态。请帮助他确定实现这一目标所需的最少机器应用次数。

注意:对同一个矩形应用两次机器是无意义的,因为这不会对矩形内的奶牛产生净影响。因此,你只需要考虑对每个左上角矩形最多使用一次

输入格式(文件 cowtip.in)

第一行输入是一个整数 N。
接下来的 N 行,每行包含一个由 N 个字符组成的字符串,每个字符是 0(表示站立的奶牛)或 1(表示被推倒的奶牛)。

输出格式(文件 cowtip.out)

请输出农夫约翰将所有奶牛恢复站立所需的最少机器应用次数。

样例输入

3
001
111
111

样例输出

2

样例解释

在这个示例中,如果农夫约翰将机器应用于整个奶牛群(这是一个有效的左上角矩形),他会将它们的状态切换为:

110
000
000

接下来,只需将机器应用于包含那两个 1 的左上角矩形,他就完成了任务。总共只需应用 2 次机器。