那位大叔能帮小弟我解释一下这道题如何做?

那位大叔能帮我解释一下这道题怎么做???
10.【剪格子】
如图p1.jpg所示,3 x 3 的格子中填写了一些整数。

 
我们沿着图中的红色线剪开,得到两个部分,每个部分的数字和都是60。
本题的要求就是请你编程判定:对给定的m x n 的格子中的整数,是否可以分割为两个部分,使得这两个区域的数字和相等。
如果存在多种解答,请输出包含左上角格子的那个区域包含的格子的最小数目。 
如果无法分割,则输出 0
程序输入输出格式要求:
程序先读入两个整数 m n 用空格分割 (m,n<10)
表示表格的宽度和高度
接下来是n行,每行m个正整数,用空格分开。每个整数不大于10000
程序输出:在所有解中,包含左上角的分割区可能包含的最小的格子数目。
例如:
用户输入:
3 3
10 1 52
20 30 1
1 2 3
则程序输出:
3
再例如:
用户输入:
4 3
1 1 1 1
1 30 80 2
1 1 1 100
则程序输出:
10
(参见p2.jpg)

 
资源约定:
峰值内存消耗(含虚拟机) < 64M
CPU消耗 < 5000ms

------解决方案--------------------
我的想法,供参考:
所有格的总和记为M
如果M是奇数,则无解。
如果M是偶数,记N=M/2,开始下面的搜索过程:
两块中,至少一块包含左上角。所以我们可以从左上角开始延伸计算
1、如果左上角的值正好为N,不用计算了,直接剪出左上角就OK;
2、延伸一步。从已经存在的左上角块中,这将会有很多可能的结果。每种结果计算所包含的单元格数值总和(延伸前的总和+延伸单元格数值),对总和Nk做如下判断:
A、如果Nk == N,则结束(因为这时候的单元格数最少),输出结果
B、如果Nk > N,则这个块不成立,删除掉
C、如果Nk < N,则这个块还可以延伸,保留下来(保留的时候要注意不要重复保留同一开关的块)
3、对保留下来的每个可能,重复第2步骤(延伸一步),直到保留下来的可能为空(为空时无解)

要特别注意的是:64M空间的限制。保留内容要尽可能精减,不然很容易就突破64M

------解决方案--------------------
(错别字,改一下)
所有单元格数值的总和记为M
如果M是奇数,则无解。
如果M是偶数,记N=M/2,开始下面的搜索过程:
两块中,至少一块包含左上角。所以我们可以从左上角开始延伸计算
1、如果左上角的值正好为N,不用计算了,直接剪出左上角就OK;
2、延伸一步。从包含左上角的块中,增加一个单元格,这将会有很多可能的结果。每种结果计算所包含的单元格数值总和Nk(=延伸前的总和+延伸单元格数值),对Nk做如下判断:
A、如果Nk == N,则结束(因为这时候的单元格数最少),输出结果
B、如果Nk > N,则这个块不成立,删除掉
C、如果Nk < N,则这个块还可以延伸,保留下来(保留的时候要注意不要重复保留同一形状的块)
3、对保留下来的每个块,重复第2步骤(延伸一步),直到保留下来的可能为空(为空时无解)

要特别注意的是:64M空间的限制。保留内容要尽可能精减,不然很容易就突破64M