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

我们有一个最初的二维数组a[n][m],找它的 最大子数组之和

1.我们先建立一个新的二维数组b[n][m]

二维数组b[j][k] 存放的是a[j][k](0<=j<n,0<=k<m) 这一点到 a[0][0]  的最大值

2。循环:从a[0][0]开始 以此是 a[0][1]、 a[0][2]……a[0][m]、
                                          a[1][0]、 a[1][1]……a[1][m]、

a[2][0]、 a[2][1]……a[2][m]、

……

a[n][0]、 a[n][1]……a[n][m]、

具体循环工作:

当循环到a[j][k](0<=j<n,0<=k<m)

则求的是 a[j][k]到 a[0][0]  的最大值

计算方法:

b[j][k]=a[j][k]+b[j-1][k]+b[j][k-1]-b[j-1][k-1]

若b[j][k]<0,则赋值为0;

每次计算完成后,都需要与max进行比较

当然:  二位数组边缘部分循环时需要稍做调整

当然部分细节也没说到,留给大家自己考虑

#include<iostream.h>
int main()
{
int i,j;
int a[3][3]={-1,-2,1,-3,4,2,3,4,-5};
int b[3][3];
int max=a[0][0];
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
cout<<a[i][j]<<' ';
}
cout<<endl;
}
for(i=0;i<1;i++)
{
b[0][0]=a[0][0];
for(j=0;j<3;j++)
{
if(a[0][j-1]<0)
{
b[0][j]=a[0][j];
}
else
{
b[0][j]=b[0][j-1]+a[0][j];
}
}
}
for(i=1;i<3;i++)
{
for(j=0;j<1;j++)
{
if(a[i-1][0]<0)
{
b[i][0]=a[i][0];
}
else
{
b[i][0]=b[i-1][0]+a[i][0];
}
}
}
for(i=1;i<3;i++)
{
for(j=1;j<3;j++)
{
if(b[i-1][j-1]<0)
{
if(b[i-1][j]>=0&&b[i][j-1]>=0)
{
if(b[i][j-1]>=b[i-1][j])
{
b[i][j]=b[i][j-1]+a[i][j];
}
else
{
b[i][j]=b[i-1][j]+a[i][j];
}
}
else if(b[i-1][j]>=0&&b[i][j-1]<=0)
{
b[i][j]=b[i-1][j]+a[i][j];
}
else if(b[i-1][j]<=0&&b[i][j-1]>=0)
{
b[i][j]=b[i][j-1]+a[i][j];
}
else
{
b[i][j]=a[i][j];
}
}
else
{
if(b[i-1][j]>=0&&b[i][j-1]>=0)
{
b[i][j]=a[i][j]+b[i-1][j]+b[i][j-1]-b[i-1][j-1];
}
else if(b[i-1][j]>=0&&b[i][j-1]<=0)
{
b[i][j]=a[i][j]+b[i-1][j]-b[i-1][j-1];
}
else if(b[i-1][j]<=0&&b[i][j-1]>=0)
{
b[i][j]=a[i][j]+b[i][j-1]-b[i-1][j-1];
}
else
{
b[i][j]=a[i][j];
}
}
}
}
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
cout<<b[i][j]<<" ";
}
cout<<endl;
}
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
if(b[i][j]>max)
max=b[i][j];
}
}
cout<<"max="<<max<<endl;
return 0;
}

完成者: 信1205 李志岩

信1205 张新宇

求一个二维整数数组最大子数组之和,时间复杂度为N^2的更多相关文章

  1. 计算机二级-C语言-程序设计题-190119记录-求出一个二维数组每一列的最小值。

    //编写一个函数:tt指向一个M行N列的二维数组,求出二维数组每列中最小的元素,并依次放入pp所指的一维数组中.二维数组中的数在主函数中赋予. //重难点:求出的是每一列的最小值,这里要注意,学会简化 ...

  2. 如何用一个for循环打印出一个二维数组

    思路分析: 二维数组在内存中默认是按照行存储的,比如一个二维数组{{1,2,3,},{4,5,6}},它在内存中存储的顺序就是1.2.3.4.5.6,也就是说,对于这6个数组元素,按照从0到5给它们编 ...

  3. ytu 1050:写一个函数,使给定的一个二维数组(3×3)转置,即行列互换(水题)

    1050: 写一个函数,使给定的一个二维数组(3×3)转置,即行列互换 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 154  Solved: 112[ ...

  4. [CareerCup] 13.10 Allocate a 2D Array 分配一个二维数组

    13.10 Write a function in C called my2DAlloc which allocates a two-dimensional array. Minimize the n ...

  5. new一个二维数组

    .定义一个二维数组 char **array1 array1 = new char *[x]; for(i=0;i<x;++i) array1[i] = new char[y]; ...用的时候 ...

  6. c语言题目:找出一个二维数组的“鞍点”,即该位置上的元素在该行上最大,在该列上最小。也可能没有鞍点

    //题目:找出一个二维数组的“鞍点”,即该位置上的元素在该行上最大,在该列上最小.也可能没有鞍点. // #include "stdio.h" #include <stdli ...

  7. poj2155一个二维树状数组

                                                                                                         ...

  8. php中向前台js中传送一个二维数组

    在php中向前台js中传送一个二维数组,并在前台js接收获取其中值的全过程方法: (1),方法说明:现在后台将数组发送到前台 echo json_encode($result); 然后再在js页面中的 ...

  9. JAVA生成一个二维数组,使中间元素不与相邻的9个元素相等,并限制每一个元素的个数

    JAVA生成一个二维数组,使中间元素不与相邻的9个元素相等,并限制每一个元素的个数 示例如下 至少需要九个元素:"A","B","C",&q ...

随机推荐

  1. 2017.3.12 H5学习的第一周

    本周我开始了H5的学习,在这一周里我们从html的基本标签开始一直讲到了才算css的用法,接下来我将记录下来本周我学到的H5的内容. 首先是声明文档,声明文档类型是HTML5文件,它在HTML文档必不 ...

  2. 1134: 零起点学算法41——多组测试数据(a+b)III

    1134: 零起点学算法41--多组测试数据(a+b)III Time Limit: 1 Sec  Memory Limit: 64 MB   64bit IO Format: %lldSubmitt ...

  3. 腾讯云上PhantomJS用法示例

    崔庆才 前言 大家有没有发现之前我们写的爬虫都有一个共性,就是只能爬取单纯的html代码,如果页面是JS渲染的该怎么办呢?如果我们单纯去分析一个个后台的请求,手动去摸索JS渲染的到的一些结果,那简直没 ...

  4. 使用HttpClient进行Get方式通信

    下载apache包 http://hc.apache.org/downloads.cgi 比较eclipse自带api,简单,易上手 实例: package zw1; import java.io.I ...

  5. Html 经典布局(三)

    经典布局案例(三): <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...

  6. Unity -JsonUtility的使用

    今天,为大家分享一下unity上的Json序列化,应该一说到这个词语,我们肯定会觉得,这应该是很常用的一个功能点:诚然,我们保存数据的时候,也许会用到json序列化,所以,我们有必要快速了解一下它的简 ...

  7. 使用Block传值

    使用Block的地方很多,其中传值只是其中的一小部分,下面介绍Block在两个界面之间的传值: 先说一下思想: 首先,创建两个视图控制器,在第一个视图控制器中创建一个UILabel和一个UIButto ...

  8. JS+html--实现图片轮播

    大家肯定见过某些网站一个炫酷的页面,就是图片轮播,也就是我们常说的幻灯片播放.对于初学者来说,可能会有点头疼,没关系,小李在这给大家献上自己刚刚写好的关于图片轮播的代码. 以下功能的实现用了jQuer ...

  9. Winform 使用DotNetBar 根据菜单加载TabControl

    winform 如何使用TabControl 控件来做winform界面框架? 这样的效果: 首先菜单的窗口展示的承载器为TabControl 控件,这个控件本身包含多页面预览和页面初始化. 如图所示 ...

  10. Java 8 lambda初试

    λ表达式本质上是一个匿名方法.让我们来看下面这个例子: public int add(int x, int y) { return x + y; } 转成λ表达式后是这个样子: (int x, int ...