题解 | #最大子矩阵#

最大子矩阵

http://www.nowcoder.com/practice/a5a0b05f0505406ca837a3a76a5419b3

# 求解一维最大子数组的子函数,我们将问题转化为多个一维子问题
def maxSubArray(nums):
    tmp = [nums[0]]
    for i in range(1, len(nums)):
        if tmp[i-1] < 0:
            tmp.append(nums[i])
        else:
            tmp.append(tmp[i-1] + nums[i])
    return max(tmp)

# 读入数据
n = int(input())
matrix = []
for _ in range(n):
    row = list(map(int, input().split()))
    matrix.append(row)

# 每一列求前缀和
preSum = [[0] * n]
preSum.append(matrix[0])
for i in range(1, n):
    row = [0] * n 
    for j in range(n):
        row[j] = preSum[-1][j] + matrix[i][j] 
    preSum.append(row)
    
# 遍历每种行i行j的组合, 利用前缀和求出i, j 之间每一列的和
# 此时问题转化为一维最大子数组的和问题
maxSubMatrix = -float('inf')
for i in range(n):
    for j in range(i, n):
        nums = [0] * n 
        for k in range(n):
            nums[k] = preSum[j+1][k] - preSum[i][k]
        res = maxSubArray(nums)
        maxSubMatrix = max(res, maxSubMatrix)
print(maxSubMatrix)

全部评论
row[j] = preSum[-1][j] + matrix[i][j],大佬这个是啥意思呀,刚学习python,没看懂😂
点赞 回复 分享
发布于 2022-05-09 14:10

相关推荐

陆续:不可思议 竟然没那就话 那就我来吧 :你是我在牛客见到的最美的女孩
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-10 14:00
林子大了什么鸟都有啊,我觉得我说的已经很客气了,阴阳谁呢
牛客62656195...:应该不是阴阳吧?你第一次注册的时候boss就说你是牛人
点赞 评论 收藏
分享
评论
2
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务