第一种:暴力枚举所有的子数组,然后比较选出最大,时间复杂度O(n^2)第二种:分治法,参见算法导论,时间复杂度O(nlogn)第三种:动态规划,时间复杂度O(n)1、A[1..j+1]的最大子数组为:max{A[1..j] , A[i,j+1](10?A[j+1]+K[j]:A[j+1](以A[j+...
分类:
编程语言 时间:
2015-03-08 15:37:45
阅读次数:
156
hoj2558,给定一个矩阵,返回最大的子矩阵的和。
思路(动态规划):
1.读入矩阵的同时计算部分和矩阵
2.枚举矩阵的行上下边界,固定了行上下边界后,
根据部分和矩阵在O(1)时间内得到同一列元素的和,转化为1维数组的情况
3.按照一维数组的情况,求最大子数组和的思路是:
可以从后往前计算,每次先算以当前元素A[i]为开头的最大和start,
再将start与当前A[i+1:n]...
分类:
其他好文 时间:
2014-11-13 22:36:50
阅读次数:
305
求最大子数组的和,算法导论只分治递归求解,暴力求解,记忆扫描方法。...
分类:
编程语言 时间:
2014-11-04 09:25:49
阅读次数:
186
最大字数组问题是递归与分治算法中的经典问题:问题:求一个数组中相加可以获得最大值的子数组,子数组是指原数组中任意连续的一段代码:#include<iostream>
usingnamespacestd;
intmax_mid(int*a,intmid,intlow,inthigh)
{
intml=a[mid];
intmr=0;
intsum=ml;
for(inti=..
分类:
编程语言 时间:
2014-10-21 19:54:46
阅读次数:
204
这个求最大子数组乘积问题是由最大子数组之和问题演变而来,但是却比求最大子数组之和要复杂,因为在求和的时候,遇到0,不会改变最大值,遇到负数,也只是会减小最大值而已。而在求最大子数组乘积的问题中,遇到0会使整个乘积为0,而遇到负数,则会使最大乘积变成最小乘积,正因为有负数和0的存在,使问题变得复杂了不...
分类:
编程语言 时间:
2014-10-16 17:11:32
阅读次数:
274
问题描述:
一个数组,长度为N,数组元素有负有正,如{-1, 4, 6, -3, 7, -3, -3, 9};我们可以清楚的知道最大的子数组应该是4到9,也就是下标1到下标7,和为17。
求解思路:
第一种方法:我们可以用定义1、两个数ThisSum和MaxSum来记录当前数组的和,以及数组的最大和。
2、我们可以用两个for循环来来遍历数组,每一次求出子数组的最大和,每个子数组从...
分类:
其他好文 时间:
2014-05-09 01:19:17
阅读次数:
304