python 求矩阵的最大子矩阵

给定一个n*m的矩阵A,求A中的一个非空子矩阵,使这个子矩阵的元素和最大。其中,A的子矩阵指在A中行和列均连续的一部分。

输入格式

输入的第一行包含两个整数n,m(1<=n,m<=50),分别表示矩阵A的行数和列数。接下来n行,每行m个整数,表示矩阵Aij(-1000<=Aij<=1000)。

输出格式

输入一行,包含一个整数,表示A中最大的矩阵元素和。

样例输入

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

样例输出

6

暴力枚举法

m,n=input().split()
m=int(m)#行数
n=int(n)#列数
dp=[[0 for i in range(n)]for i in range(m)]
line=[]
for i in range(m):
    line=input().split()
    line=list(map(int,line))
    for j in range(n):
        dp[i][j]=line[j]
max=-99999999999999
sum=0
# right为右边界 left为左边界 up为上边界 down为下边界
for left in range(n):
    for right in range(left,n):
        for up in range(m):
            for down in range(up,m):
                sum=0
                for i in range(left,right+1):
                    for j in range(up,down+1):
                        sum=sum+dp[j][i]
                if sum>max:
                    max=sum
print(max)
posted @ 2020-01-17 10:36  mark_0  阅读(3460)  评论(0编辑  收藏  举报