码迷,mamicode.com
首页 > 编程语言 > 详细

子数组之和的最大值(二维)

时间:2015-04-24 09:07:47      阅读:214      评论:0      收藏:0      [点我收藏+]

标签:二维数组   c++   算法   

技术分享解法一:

     最直接的方法,枚举一个矩形区域,然后再求这个矩形区域中元素的和。

int max(int x, int y)
{
return (x > y) ? x : y;
}
//@parameters
//n,行数
//m,列数
int MaxSum(int *A, int n, int m)
{
maximum = -INF;
for (i_min = 1; i_min <= n; i_min++)
for (i_max = i_min; i_max <= n; i_max++)
for (j_min = 1; j_min <= m; j_min++)
for (j_max = j_min; j_max <= m; j_max++)
maximum = max(maximum, Sum(i_min, i_max, j_min, j_max));
return maximum;
}

技术分享

技术分享

技术分享

技术分享

for (i = 0; i <= n; i++)
   PS[i][0] = 0;
for (j = 0; j <= M; j++)
   PS[0][j] = 0;
for (i = 1; i <= n; i++)
   for (j = 1; j <= M; j++)
   {
  PS[i][j] = PS[i - 1][j] + PS[i][j - 1] - PS[i - 1][j - 1] + B[i][j];
   }

技术分享

技术分享解法二:

技术分享

技术分享

//@parameters
//A,二维数组
//n,行数
// m,列数


int MaxSum(int* A, int n, int m)
{
maximum = -INF;
for (a = 1; a <=n; a++)
for (c = a; c <= n; c++)
{
Start = BC(a, c, m);
All = BC(a, c, m);
for (i = m - 1; i >= 1; i--)
{
if (Start < 0)
Start = 0;
Start += BC(a, c, i); 
if (Start > All)
All = Start;


}
if (All > maximum)
maximum = All;
}
return  maximum;
}

技术分享

子数组之和的最大值(二维)

标签:二维数组   c++   算法   

原文地址:http://blog.csdn.net/wangfengfan1/article/details/45228089

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!