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)


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM