问题 BP: 沙盘游戏

内存限制:128 MB 时间限制:1 S 标准输入输出
题目类型:传统 评测方式:文本比较 上传者:
提交:1044 通过:386

题目描述

Ivy是如此地喜欢编程,以至于在面对游戏时也是如此。在沙盘游戏中有一个巨大的方形沙盘(长方形或者正方形),该沙盘被分隔成边长为1的小方格,每个小方格内有一个整数。沙盘玩家需要在沙盘中圈出一个方形(长方形或者正方形都可以)的区域(必须沿着小方格的边界划线,不能穿过小方格的内部),目标是争取被圈区域内的整数之和最大。
为了描述方便,Ivy把这个沙盘用n*m个整数来表示,每个整数所在位置表示沙盘中一个边长为1的小方格。
Ivy现在需要编程解决这样一个问题:在n*m(n行m列)个整数中选择一个x*y(x行y列)的方形区域(x最大可达n,y最大可达m),使得这x*y个整数之和是所有可以选择的方形区域中最大的,并输出这个最大总和值。

输入格式

第一行包含n和m二个整数,中间用一个空格分隔,分别表示原始方形区域中所包含的行数和列数。下面有n行,每行m个整数(每个整数的范围是-200到200)组成的数据。

输出格式

一行一个整数,表示某个被圈出的方形区域中所有位置上整数之和,该值必须是所有可以圈出的方形区域所对应整数和中,总和最大的那个,该值确保不超过106 。

输入样例 复制

3 3
10 -21 9
7 8 4
-6 1 0

输出样例 复制

19

数据范围与提示

圈出的方形区域是第二行的3个整数,即7、8、4,此三数之和为19,为所有可圈出区域中整数之和的最大值。
对于10%的数据,n,m<=5
对于40%的数据,n,m<=30
对于60%的数据,n,m<=40
对于90%的数据,n,m<=80
对于100%的数据,n,m<=280