最大子矩阵和

题目描述

给定一个二维整数矩阵,要在这个矩阵中。选出一个子矩阵,使得这个子矩阵内所有的数字和尽量大

我们把这个子矩阵称为 “和最大子矩阵”,子矩阵的选取原则,是原矩阵中一段相互连续的矩形区域

输入描述

输入的第一行包含两个整数N,M

(1 <= N, M <= 10)

表示一个 N 行 M 列的矩阵

下面有N行 每行有M个整数

同一行中每两个数字之间有一个空格

最后一个数字后面没有空格

所有的数字得在-1000 ~ 1000之间

输出描述

输出一行,一个数字。表示选出的“和最大子矩阵”内所有数字的和

示例

输入

3 4
-3 5 -1 5
 2 4 -2 4
-1 3 -1 3

输出

20

说明

一个3*4的矩阵中 后面3列的和为20,和最大

def max_submatrix_sum(N, M, matrix):
    # 计算前缀和
    prefixSum = [[0] * (M + 1) for _ in range(N + 1)]
    for i in range(1, N + 1):
        for j in range(1, M + 1):
            prefixSum[i][j] = matrix[i-1][j-1] + prefixSum[i-1][j] + prefixSum[i][j-1] - prefixSum[i-1][j-1]

    # 枚举子矩阵并计算最大和
    max_sum = float('-inf')
    for i1 in range(1, N + 1):
        for j1 in range(1, M + 1):
            for i2 in range(i1, N + 1):
                for j2 in range(j1, M + 1):
                    # 计算子矩阵 (i1, j1) 到 (i2, j2) 的和
                    submatrix_sum = prefixSum[i2][j2] - prefixSum[i1-1][j2] - prefixSum[i2][j1-1] + prefixSum[i1-1][j1-1]
                    max_sum = max(max_sum, submatrix_sum)

    return max_sum

# 示例输入
N, M = 3, 4
matrix = [
    [-3, 5, -1, 5],
    [2, 4, -2, 4],
    [-1, 3, -1, 3]
]

# 计算结果
print(max_submatrix_sum(N, M, matrix))

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值