求二维数组子数组的最大值,开始思路不太清晰。先从最简单的开始。

以2*2的简单数组为例找规律,

假设最大数为a[0][0],则summax=a[0][0],比较a[0][0]+a[0][1]、a[0][0]+a[1][0]、a[0][0]+a[0][1]+a[1][0],最后求出summax;

3*3 的数组同理:

假设最大值为a[0][0],则summax=a[0][0],比较a[0][0]所在行和列的最大子数组,取大的赋值给summax,接着扩充数组,继续比较,求出summax;

m*n 的数组即为:

先求出数组中的最大值a[i][j],将它赋值给summax(最大子数组之和);

然后在a[i][j]所在行上,进行扩展,找到行上的最大行的连续数组;

同理,在所在列上继续寻找,找到列上的最大连续数组;

然后以找到的行列数组为框架,继续寻找更大的子数组;

依次比较,最终求出最大子数组的和。

程序实现:

 //求二维数组的连续子数组之和的最大值
int MaxSum(int (*array)[N])
{
int PartSum[N+][M+];
int i,j;
for(i=;i<=N;i++)
PartSum[i][]=;
for(j=;j<=M;j++)
PartSum[][j]=;
for(i=;i<=N;i++)
for(j=;j<=M;j++)
PartSum[i][j]=PartSum[i-][j]+PartSum[i][j-]-PartSum[i-][j-]+array[i-][j-];
int MaxSum=-INFINITY;//初始化
int imin,imax,jmin,jmax;
for(imin=;imin<=N;imin++)
for(imax=imin;imax<=N;imax++)
for(jmin=;jmin<=M;jmin++)
for(jmax=jmin;jmax<=M;jmax++)
MaxSum=MaxNum(MaxSum,PartSum[imax][jmax]-PartSum[imin-][jmax]-PartSum[imax][jmin-]+PartSum[imin-][jmin-]); return MaxSum;
} #include<iostream>
using namespace std;
int maxSum(int *a, int hang, int lie)
{
int sum=;
for(int i=;i<hang;i++)
{
for(int j=;j<lie;j++)
{
for(int k=i;k<hang;k++)
{
for(int l=j;l<lie;l++)
{
sum = ;
for(int n=i; n<=k;tn++)
for(int m=j; m<=l;m++)
{
sum += a[n*lie+m]; }
b= max(sum,b);
}
}
}
}
cout<<"最大的子数组和:"<<b<<endl;
}
int main()
 {
  int a[][]={{,-,,},{,,,-},{,,,},{,-,,}};
maxSum( a, ,);
}

求二维数组最大子数组的和。郭林林&胡潇丹的更多相关文章

  1. 求一个二维整数数组最大子数组之和,时间复杂度为N^2

    本随笔只由于时间原因,我就只写写思想了 二维数组最大子数组之和,可以  引用  一维最大子数组之和 的思想一维最大子数组之和 的思想,在本博客上有,这里就不做多的介绍了 我们有一个最初的二维数组a[n ...

  2. Problem N: 求二维数组中的鞍点【数组】

    Problem N: 求二维数组中的鞍点[数组] Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 2764  Solved: 1728[Submit][S ...

  3. 洛谷 P1972 [SDOI2009]HH的项链-二维偏序+树状数组+读入挂(离线处理,思维,直接1~n一边插入一边查询),hahahahahahaha~

    P1972 [SDOI2009]HH的项链 题目背景 无 题目描述 HH 有一串由各种漂亮的贝壳组成的项链.HH 相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含 ...

  4. BOI2007 Mokia | cdq分治求二维点数模板

    题目链接:戳我 也没什么,其实主要就是为了存一个求二维坐标上矩形内点的个数的模板.为了之后咕咕咕地复习使用 不过需要注意的一点是,树状数组传x的时候可千万不要传0了!要不然会一直死循环的...qwqw ...

  5. Educational Codeforces Round 41 967 E. Tufurama (CDQ分治 求 二维点数)

    Educational Codeforces Round 41 (Rated for Div. 2) E. Tufurama (CDQ分治 求 二维点数) time limit per test 2 ...

  6. 求二维数组的最大子数组———曹玉松&&蔡迎盈

    继上节课老师让求了一维数组最大的子数组后,这节课堂上,老师加深了难度,给了一个二维数组,求最大子数组,开始觉得很容易,但是自己思考起来感觉这个算法很困难,既需要考虑数组直接的连续,又要求出最大的,老师 ...

  7. [软件工程] 查找二维数组最大子数组的之和 郭莉莉&李亚文

    一. 在主函数中实现二维数组的输入. 代码主要函数maxson(),主要利用for()循环先查找出最大字数组的四角的坐标xmin,xmax,ymin,ymax来确定最大子数组, 在循环中算出之和,编写 ...

  8. Task 4.5 求二维数组中的最大连通子数组之和

    任务:输入一个二维整形数组,数组里有正数也有负数. 求所有子数组的和的最大值.要求时间复杂度为O(n). 1.设计思想:因为用之前的解决子数组最大和的问题的思路一直没能解决这个问题,后来看到同学使用将 ...

  9. 求二维数组联通子数组和的最大值 (联通涂色) beta!

    算法十分臃肿,效率捉鸡,不知用了多少循环,还有bug...任重道远,编程之美. 思想:按行遍历,找出每行的最大子数组.若行间都联通,行最大子数组相加后,再加上独立的正数.若行间不连通,找出较大子路径, ...

随机推荐

  1. python里的splitlines具体解释

        Python的split方法函数能够切割字符串成列表,默认是以空格作为分隔符sep来切割字符串. In [1]: s = "www jeapedu com" In [2]: ...

  2. linux批量远程多服务器FTP并下载文件的脚本

    #!/bin/bashtime=`date +%Y%m`day=`date -d '-1 days' +%Y%m%d`localDir="/DBBackup/GameDB"cd $ ...

  3. 使用yii的layout,加入<?php echo $content; ?>这句话时,它会自动在子页面上面添加一个div包裹

    使用yii的layout,加入<?php echo $content; ?>这句话时,它会自动在子页面上面添加一个div包裹,而且div的id命名为id=content,这个和已有id重复 ...

  4. chrome://命令

    一些常用的命令: chrome://version 显示当前版本 chrome://flags 实验项目,加“#项目名称”锚点可以直接定位到项目 chrome://settings 设置,下图是设置定 ...

  5. js 正则验证

    Html 代码如下: <table> <tr> <td>匹配正整数:</td> <td><input type="text& ...

  6. Hdu4952 - Number Transformation - 数论(2014 Multi-University Training Contest 8)

    寻找1~k内i的倍数.则这个数能够看成i*x,则下一个数为(i+1)*y,(i+1)*y>=i*x,那么能够推出.y=x-x/(i+1); 那么当x<i+1时,y==x.之后的循环也不会改 ...

  7. GoodUserInterface 模仿页面功能

    模仿一些好的应用中的好的界面或功能.平时使用的APP有很多,其中一些都是常见的功能的拼凑,在业务层面比较复杂,而具体的页面实现都很类似.在这种情况下,我们还会发现有一些APP的页面效果的实现方式比较独 ...

  8. 用java数组模拟购物商城功能与实现

    实体类1(商品): package mall.model; public class goods { private int shoppingID; // 商品编号 private String sh ...

  9. 5分钟速成C++14多线程编程

    原文链接:Learn C++ Multi-Threading in 5 Minutes C++14的新的多线程架构非常简单易学,如果你对C或者C++很熟悉,那么本文非常适合你.作者用C++14作为基准 ...

  10. pci枚举初始化部分(1)

    基于linux-4.20-rc3源码分析 1 .扫描所有PCI设备并检测,填充设备结构体 static struct pci_dev *pci_scan_device(struct pci_bus * ...