最大子序列和 最大子矩阵和
2016-09-15 13:29
176 查看
1.最大子序列和
如果子序列和是负数,就从下一个重新开始算。#coding: utf-8 #Python 2.7 def max_sum_of_subsequence(a): if not a: return False maxSub = [0] * len(a) maxSub[0] = a[0] maximum = maxSub[0] for i in range(1, len(a)): maxSub[i] = maxSub[i-1] + a[i] if maxSub[i-1] > 0 else a[i] if maxSub[i] > maximum: maximum = maxSub[i] return maximum
2.最大子矩阵和
最大子序列和的升级版参考文章
ps.参考文章中的程序有点问题
主要思想:按行累加(也可以按列),转化为最大子序列和问题。
例如:
1 2 3 4 -5 6 7 8 -9 以行来说,它的最大子矩阵可能是1行,2行,3行,1行有3种情况,2行有2种情况,3行有一种情况 以2行为例,有: 1 2 3 4 -5 6 和 4 -5 6 7 8 -9 将这2种情况按行累和(把每行对应元素相加),得到: 5 -3 9 和 11 3 -3 即可转化为最大子序列和问题。
#coding: utf-8 # Python 2.7 def max_sum_of_submatrix(a): """ a: int[[],[],...] """ # total: 各行的累加,total[0]:第0行,total[1]:第0行加第一行,total[i]:第0行加到第i行 import copy total = copy.deepcopy(a) for i in range(1,len(a)): for j in range(0,len(a[0])): total[i][j] += total[i-1][j] maximum = min([min(x) for x in a]) for i in range(0,len(a)): for j in range(i,len(a)): result = [0]*len(a[0]) for k in range(0,len(a[0])): if i == 0: result[k] = total[j][k] else: result[k] = total[j][k] - total[i-1][k] maximal = max_sum_of_subsequence(result) if maximal > maximum: maximum = maximal return maximum
相关文章推荐
- 算法题2 动态规划之最大子序列和&最大子矩阵和
- 笔试和面试题(4)---最大子序列与最大子矩阵问题
- hdu1081 最大子矩阵和(DP动态规划 最大子序列和变形题)
- Maximum Sum 最大子矩阵和+dp+(最大连续子序列的变形)
- 动态规划:ZOJ1074-最大和子矩阵 DP(最长子序列的升级版)
- ZOJ1074 最大和子矩阵 DP最大连续子序列
- HDU 1081 最大子矩阵(求最大连续子序列和)
- 最大子序列和最大子矩阵
- 最大子序列和最大子矩阵
- 最大子序列和最大子矩阵
- 最大子矩阵(最大子序列变形)
- 算法题2 动态规划之最大子序列和&最大子矩阵和
- 关于子序列最大和的几种算法
- hdu 1231最大连续子序列 (动态规划)
- 【HDU 1231】最大连续子序列(DP)
- HDU 2870 Largest Submatrix DP求最大子矩阵
- 求所有最大公共子序列的算法实现
- 最大子序列和 Maximum Subarray
- 求最大连续子序列的和,两种解法:动态规划 & Kadane算法
- 求和最大的子矩阵