利用动态规划求连续数组最大和以及最大子矩阵的和

题目一:

给定一个整型数组,数组中有正有负,求最大连续子序列的和。

 

解法:

利用动态规划的思想。

设f(n)表示以a[n]为子序列最后一个元素的最大和,则可以有下面的规则:

(1)当f(n-1)<0时,f(n)=a[n];

(2)当n!=0且f(n-1)>0时,f(n)=f(n-1)+a[n]。

用一个nGreatestNum来记录最大值,每次与f(n)进行比较,不断更新即可。

 

题目二:

给定一个二维数组,数组中有正有负,求最大子矩阵的和。

 

解法:

仍然用动态规划的思想。

首先,将二维问题降维处理:

例如,用2 维数组a[1 : m][1 : n]表示给定的m行n列的整数矩阵。子数组a[i1 : i2][j1 : j2]表示左上角和右下角行列坐标分别为(i1, j1)和(i2, j2)的子矩阵。

先按照行排列出所有可能区间,然后,再去求列的范围。

更详细的,当行区间确定之后,剩下就是确定列区间了,一旦确定列区间,最大子矩阵就确定了。

当行区间确定之后,求列区间的方法,可以转化成一维数组的最大连续子序列的问题:对行区间[i1, j1],依次对列进行求和,就得到n个数据的以为数组,根据最大连续子序列的和的求法&#

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页