题解 | #最大子矩阵# 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)


全部评论

相关推荐

不愿透露姓名的神秘牛友
06-10 15:24
高考前一晚在OPPO手机上设置了早上5:30的闹钟,然而闹钟并未按时响起。直到妈妈做好早餐后,在6:27打开手机才发现闹钟未触发,“气得早上饭都没吃”。资本家你赢了
永不遗忘:我来解释一下 :Oppo 手机晚上两点会自动进行系统更新,这个系统更新会重置掉所有设置好的闹钟,而且他也不会告诉你,而且只有 Oppo 会这样,华为苹果小米三星都不会
点赞 评论 收藏
分享
吴offer选手:我卡在笔试才是最好笑的,甚至没给我发过笔试链接
投递哔哩哔哩等公司7个岗位
点赞 评论 收藏
分享
LemontreeN:有的兄弟有的我今天一天面了五场,4个二面一个hr面
投递字节跳动等公司7个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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