# 矩形区域不超过 K 的最大数值和
给你一个 m x n 的矩阵 matrix 和一个整数 k ,找出并返回矩阵内部矩形区域的不超过 k 的最大数值和。
题目数据保证总会存在一个数值和不超过 k 的矩形区域。
示例 1:
输入:matrix = [[1,0,1],[0,-2,3]], k = 2
输出:2
解释:蓝色边框圈出来的矩形区域 [[0, 1], [-2, 3]] 的数值和是 2,且 2 是不超过 k 的最大数字(k = 2)。
示例 2:
输入:matrix = [[2,2,-1]], k = 3 输出:3
提示:
m == matrix.lengthn == matrix[i].length1 <= m, n <= 100-100 <= matrix[i][j] <= 100-105 <= k <= 105
进阶:如果行数远大于列数,该如何设计解决方案?
## template ```java class Solution { public int maxSumSubmatrix(int[][] matrix, int k) { int row = matrix.length; if (row <= 0) return 0; int line = matrix[0].length; int max = Integer.MIN_VALUE; for (int left = 0; left < line; left++) { int[] rowSum = new int[row]; for (int right = left; right < line; right++) { for (int i = 0; i < row; i++) { rowSum[i] += matrix[i][right]; } max = Math.max(max, dpmax(rowSum, k)); } } return max; } private int dpmax(int[] arr, int k) { int max = Integer.MIN_VALUE; int n = arr.length; for (int top = 0; top < n; top++) { int sum = 0; for (int bottom = top; bottom < n; bottom++) { sum += arr[bottom]; if (sum > max && sum <= k) max = sum; } } return max; } } ``` ## 答案 ```java ``` ## 选项 ### A ```java ``` ### B ```java ``` ### C ```java ```