子数组之和的最大值(二维)
来源:互联网 发布:迪奥西斯形态数据 编辑:程序博客网 时间:2024/05/20 04:10
二维情况下,定义“部分和”PS[i][j]等于以(1,1),(i,1),(1,j),(i,j)为顶点的矩形区域的元素之和。则以(i_min,j_min),(i_min,j_max),(i_max,j_min),(i_max,j_max)为顶点的矩形区域的元素之和,等于PS[i_max][j_max]-PS[i_min-1][j_max]-PS[i_max][j_min-1]+PS[i_min-1][j_min-1]。(可以想象)。对于求解部分和,也能以O(1)时间得到新的部分和,PS[i][j]=PS[i-1][j]+PS[i][j-1]-PS[i-1][j-1]+B[i][j],其中B[i][j]为矩阵中第i行第j列的元素(下标从1开始)。因此用O(N*M)时间复杂度可以处理所有部分和。故算法总时间复杂度为O(N*N*M*M)。
进一步解法:枚举矩形上下边界(左右也可以),然后用一维情况下的方法确定左右边界,就可以得到二维问题的解(将BC(a,c,i)看成是一维里的一个元素)。新方法时间复杂度为O(N*N*M)。BC(a,c,i),表示在第a行和第c行之间的第i列的所有元素的和,显然可以通过“部分和”在O(1)时间内计算出来,它等于PS[c][i]-PS[a-1][i]-PS[c][i-1]+PS[a-1][i-1]。(这些PS在前面的计算中以及获得)
通过选择枚举上下或左右可以使时间复杂度变为O(N*M*min(N,M))。- 子数组之和的最大值(二维)
- 子数组之和的最大值(二维)
- 【ACM】数组的子数组之和的最大值(二维)
- 二维子数组之和的最大值
- 二维子数组之和的最大值
- 二维子数组之和的最大值
- 子数组之和的最大值(二维)
- 子数组之和的最大值(二维)
- 二维子数组之和的最大值
- 编程之美---子数组之和的最大值(二维)
- 求子数组之和的最大值(二维)
- 2.15 子数组之和的最大值(二维)
- 二维数组的子数组之和的最大值
- 子数组之和最大值(二维数组)
- 编程之美 子数组之和的最大值(二维)
- 数字之魅:子数组之和的最大值[二维]+[三维]
- 一维和二维子数组之和最大值
- 求数组的连续子数组之和的最大值(一维二维)
- DBWN\LGWR\CKPT触发条件
- SQL数据库还原时错误:操作系统返回了错误 '5(拒绝访问)'的解决办法
- 求数组的子数组之和的最大值
- [LiveCycle Designer ES2]第1节--PDF 表单计算
- 强制去除xcode的编译警告
- 子数组之和的最大值(二维)
- 性能分析摘要
- C语言深度剖析
- 7 JavaScript Basics Many Developers Aren't Using (Properly)
- 调用Twain 直接返回扫描图片
- 终于博客搬家完了
- edittext禁止首次启动自动弹出输入法
- Linux内存管理之mmap详解
- VC操作MPP文件