输入是一个N * N的矩阵。输入的第一行给出N (0 < N <= 100)。 再后面的若干行中,依次(首先从左到右给出第一行的N个整数,再从左到右给出第二行的N个整数……)给出矩阵中的N2个整数,整数之间由空白字符分隔(空格或者空行)。 已知矩阵中整数的范围都在[-127, 127]。
输出最大子矩阵的大小。
4 0 -2 -7 0 9 2 -6 2 -4 1 -4 1 -1 8 0 -2
15
def max_subarr_sum(arr):
local_max = -float("inf")
res = -float("inf")
for num in arr:
local_max = max(num, local_max + num)
res = max(local_max, res)
return res
def solve(matrix):
m, n = len(matrix), len(matrix[0])
res = -1
for i in range(n):
for j in range(i, n):
arr = [sum(matrix[k][i:j + 1]) for k in range(m)]
res = max(res, max_subarr_sum(arr))
return res
if __name__ == '__main__':
n = int(input())
matrix = []
while n:
matrix.append(list(map(int, input().split())))
n -= 1
print(solve(matrix)) 先求一维最大子序列,然后把双指针把矩阵压缩。
try:
while True:
num = int(input())
matrix = []
for i in range(num):
matrix.append(list(map(int,input().split())))
maxSubMatrix = 0
for i in range(num):
array = [0] * num #i行到j行之间同列的相加
for j in range(i,num):
for q in range(num): #j每次加一array都会继承前面的,只有i变化时才重置array
array[q] += matrix[j][q]
temp = array[0]
ans = array[0]
for k in range(1,num): #对之前得到的i行到j行同列中找最大连续和
temp= max(temp+array[k],array[k])
ans = max(temp,ans)
if maxSubMatrix < ans:
maxSubMatrix = ans
print(maxSubMatrix)
except Exception:
pass