题解 | #最大子矩阵# Python3 + 简单解释
最大子矩阵
https://www.nowcoder.com/practice/a5a0b05f0505406ca837a3a76a5419b3
import sys # 对于一个最大和的子矩阵来说,多加上下左右任意一行或着一列,该行和列的和都为0 # 固定矩阵的最上行和最下行,相当于遍历每一列使得连续几列的最大 # 假设该列是 dp[i], dp[i] = max(sum(i列),dp[i-1]+ sum(i列)) # sum[i]列这个可以通过求前缀和获得 n = int(input()) col_sum = [[0]*n for _ in range(n)] arr = [] for i in range(n): data = input().strip().split(' ') data = [v for v in data if len(v)>0] nums = list(map(int,data)) arr.append(nums) for j,num in enumerate(nums): if i == 0: col_sum[i][j] = num else: col_sum[i][j] = col_sum[i-1][j] + num max_sum = -128 for x1 in range(n): for x2 in range(x1,n): dp = [0]* n for y in range(n): if x1 == 0: cur_col_sum = col_sum[x2][y] else: cur_col_sum = col_sum[x2][y] - col_sum[x1-1][y] if y == 0: dp[y] = cur_col_sum else: dp[y] = max(dp[y-1]+cur_col_sum, cur_col_sum) max_sum = max(max_sum, dp[y]) print(max_sum)