求解m×n矩阵中面积为k的矩形最小元素和的思路及动态规划可行性
定面积约束下矩阵矩形最小元素和求解方法
问题定义
- 给定m行n列的整数矩阵,以及面积约束值k,目标是找出矩阵内所有轴对齐、边与矩阵边界平行的矩形区域,要求矩形覆盖的单元格总数恰好等于k,计算所有满足条件的矩形的元素总和中的最小值。
通用求解步骤
- 第一步:构建二维前缀和数组。为了避免逐元素遍历计算矩形和的高时间复杂度,预先定义二维前缀和数组
pre,其中pre[i][j]表示矩阵左上角(0,0)位置到第i-1行、第j-1列位置的所有元素累加和。递推计算公式为:pre[i][j] = pre[i-1][j] + pre[i][j-1] - pre[i-1][j-1] + matrix[i-1][j-1],预处理过程仅需O(mn)时间,后续任意矩形的元素和都可以通过前缀和差在O(1)时间内算出。 - 第二步:枚举所有合法的矩形尺寸。由于矩形面积=高度h×宽度w=k,因此只需枚举k的所有正整数因数对(h, w),过滤掉h>m(高度超出矩阵总行数)或w>n(宽度超出矩阵总列数)的无效尺寸,剩下的就是矩阵能容纳的所有合法矩形规格。如果过滤后无剩余合法尺寸,说明矩阵内不存在面积为k的可放置矩形,可返回对应无效值标识。
- 第三步:遍历所有尺寸的合法矩形位置,计算并记录最小和。对每一组合法的(h, w),遍历所有能放下该尺寸矩形的左上角坐标:行范围为0到m-h,列范围为0到n-w,通过前缀和快速计算对应矩形的元素和,全程维护出现过的最小和值即可。
示例演算
针对输入的3×3矩阵(元素为[[1,2,3],[4,5,6],[7,8,9]]),k=4的计算过程如下:
- 列出k=4的所有正整数因数对:(1,4)、(2,2)、(4,1)
- 过滤无效尺寸:(1,4)的宽度为4,超过矩阵总列数3;(4,1)的高度为4,超过矩阵总行数3,仅剩余(2,2)的尺寸组合合法。
- 遍历所有2×2尺寸的矩形计算元素和:
- 左上角(0,0):元素和为1+2+4+5=12
- 左上角(0,1):元素和为2+3+5+6=16
- 左上角(1,0):元素和为4+5+7+8=24
- 左上角(1,1):元素和为5+6+8+9=28
- 所有合法矩形的最小元素和为12,与示例结果一致。
动态规划方法的适用性说明
该问题完全可以通过动态规划方法求解,且二维前缀和本身就是动态规划思路在矩阵类问题中的经典落地形式。
- 动态规划的核心价值是复用重叠子问题的计算结果,避免重复遍历矩阵累加元素。如果采用暴力逐元素求和的方式,单个矩形的求和时间为O(hw),总时间复杂度会达到O(枚举矩形数×hw);通过二维前缀和的DP递推,可将单个矩形的求和时间从O(hw)降至O(1),总时间复杂度仅为O(mn + 合法矩形枚举量),是这类定面积矩形求和问题的最优通用方案之一。
- 由于本问题存在固定的面积约束k,不需要像“无面积限制的最大/最小子矩阵和”问题那样设计更复杂的DP状态追踪累积和的变化,基于前缀和的DP预处理已可覆盖全部求解需求,没有额外的状态存储开销。
内容的提问来源于stack exchange,提问作者Satar
相关产品推荐
相关产品推荐

