C++、Java、JS、C代码:
【华为OD】C卷真题100分:最大矩阵和 C/C++代码实现[思路+代码]-CSDN博客
【华为OD】C卷真题100分:最大矩阵和 Java代码实现[思路+代码]-CSDN博客
【华为OD】C卷真题100分:最大矩阵和 JavaScript代码实现[思路+代码]-CSDN博客
【华为OD】C卷真题100分:最大矩阵和 C语言代码实现[思路+代码]-CSDN博客
题目描述:
给定一个二维整数矩阵,要在这个矩阵中选出一个子矩阵,使得这个子矩阵内所有的数字和尽量大,我们把这个子矩阵称为和最大子矩阵,子矩阵的选取原则是原矩阵中一块相互连续的矩形区域。
输入描述:
输入的第一行包含2个整数n, m(1 <= n, m <= 10),表示一个n行m列的矩阵,下面有n行,每行有m个整数,同一行中,每2个数字之间有1个空格,最后一个数字后面没有空格,所有的数字的在[-1000, 1000]之间。
输出描述:
输出一行一个数字,表示选出的和最大子矩阵内所有的数字和。
示例1输入输出示例仅供调试,后台判题数据一般不包含示例
输入
3 4 -3 5 -1 5 2 4 -2 4 -1 3 -1 3
输出
20
说明
一个3*4的矩阵中,后面3列的子矩阵求和加起来等于20,和最大。
879
+---+
3 | | ++ + +---|
| | | 3 + 6 + | + | +
| + | | + + + | + | +
| + | +---+ + + +++++ + + + | +
| + | + | + +----+ | | + + + | +
| + 3 | + | + + + 2 | | 2 + + + | +
| + | + | + + + | | + + + | +
| +---+ + | | | + ----+ | +---+ | | + | +
| | + | | | + | | | | | | + | +
| 1 | + | 8 | | + 1 | | | 1 | | 1 | | + | +
| | + | | | + | | | | | | | + | +
| +---+ + +---+ | ++---+ ++ +---+ +---+ | + | +
| | + | | | ++ | | |+ | +
|0 | + | 0 | 0 | ++ | 0 | |+ | +
| | + | | | ++ | | |+ | +
+---+ + +-------+ +---+| +|+ | +
+ + | +
0 1 2 3 4 5 6 7 8 9 10 11 12 + v: w u m u 1 0 2 4
题目解析:
使用循环来处理即可文章来源:https://www.toymoban.com/news/detail-853299.html
代码实现:
def total_result(data, pos, row, col):
res = []
for i in range(pos, len(data[0])):
ss = [sum(data[p][pos:i + 1]) for p in range(row, col + 1)]
res.append(sum(ss))
return max(res)
def get_result(data):
total = 0
data_len = len(data)
for i in range(0, data_len):
for j in range(0, len(data[0])):
for k in range(i, data_len):
total = max(total_result(data, j, i, k), total)
return total
def read_line():
data = []
for i in input().split():
if i != '':
data.append(int(i))
return data
def main():
m, n = read_line()
data = []
for i in range(m):
data.append(read_line())
res = get_result(data)
print(res)
if __name__ == '__main__':
main()
文章来源地址https://www.toymoban.com/news/detail-853299.html
到了这里,关于【华为OD】C卷真题100分:最大矩阵和 python代码实现[思路+代码]的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!