You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修正Python函数以获取2N×2N矩阵左上N×N子矩阵最大和?

解决2N×2N矩阵反转后左上N×N子矩阵最大和问题

问题描述

给定一个2N×2N的整数矩阵,可任意次数、任意顺序反转任意行或列,需要计算左上N×N子矩阵(范围从(0,0)到(N–1,N–1))的最大元素和。

示例

原4×4矩阵:

[112, 42, 83, 119,
 56, 125, 56, 49,
 15, 78, 101, 43,
 62, 98, 114, 108]

通过反转第2列和第0行后得到:

[119, 114, 42, 112,
 56, 125, 101, 49,
 15, 78, 56, 43,
 62, 98, 83, 108]

此时左上2×2子矩阵的和为 119+114+56+125=414。

错误代码分析

你提供的代码只是执行了固定的反转操作(反转所有行的左右半部分,再反转上下行),这是一种单一的变换方式,无法遍历所有可能的反转组合来找到最优解,因此得到的结果396是错误的。

错误代码:

def seanMatrix(matrix):
    n = len(matrix) // 2
    rows = len(matrix)
    columns = len(matrix[0])

    for i in range(rows):
        for j in range(columns // 2):
            matrix[i][j], matrix[i][columns - j - 1] = matrix[i][columns - j - 1], matrix[i][j]

    for i in range(rows // 2):
        for j in range(columns):
            matrix[i][j], matrix[rows - i - 1][j] = matrix[rows - i - 1][j], matrix[i][j]

    leftSum= 0
    for i in range(n):
        for j in range(n):
            leftSum += matrix[i][j]

    return leftSum

正确解法思路

核心观察:对于左上N×N区域内的任意位置(i,j),通过反转行和列,可以将以下四个对称位置中的任意一个值移动到(i,j)处:

  • (i, j)
  • (i, 2N-1-j) (同一行的对称列)
  • (2N-1-i, j) (同一列的对称行)
  • (2N-1-i, 2N-1-j) (对角对称位置)

因此,我们只需要对每组这样的四个位置,选取其中的最大值,累加到总和中,就能得到左上N×N子矩阵的最大可能和。

正确代码实现

def max_upper_left_sum(matrix):
    size = len(matrix)
    n = size // 2
    total = 0
    for i in range(n):
        for j in range(n):
            # 获取四个对称位置的值
            val1 = matrix[i][j]
            val2 = matrix[i][size - 1 - j]
            val3 = matrix[size - 1 - i][j]
            val4 = matrix[size - 1 - i][size - 1 - j]
            # 取最大值加到总和
            total += max(val1, val2, val3, val4)
    return total

测试示例

用题目中的矩阵测试:

matrix = [
    [112, 42, 83, 119],
    [56, 125, 56, 49],
    [15, 78, 101, 43],
    [62, 98, 114, 108]
]
print(max_upper_left_sum(matrix))  # 输出414,符合预期

内容的提问来源于stack exchange,提问作者micahondiwa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 12:25:14