Medium
You are given a 2D integer matrix grid
of size n x m
, an integer array limits
of length n
, and an integer k
. The task is to find the maximum sum of at most k
elements from the matrix grid
such that:
ith
row of grid
does not exceed limits[i]
.Return the maximum sum.
Example 1:
Input: grid = [[1,2],[3,4]], limits = [1,2], k = 2
Output: 7
Explanation:
4 + 3 = 7
.Example 2:
Input: grid = [[5,3,7],[8,2,6]], limits = [2,2], k = 3
Output: 21
Explanation:
7 + 8 + 6 = 21
.Constraints:
n == grid.length == limits.length
m == grid[i].length
1 <= n, m <= 500
0 <= grid[i][j] <= 105
0 <= limits[i] <= m
0 <= k <= min(n * m, sum(limits))
class Solution {
fun maxSum(grid: Array<IntArray>, limits: IntArray, k: Int): Long {
var l = 0
for (i in limits.indices) {
l += limits[i]
}
val dp = IntArray(l)
var a = 0
for (i in grid.indices) {
val lim = limits[i]
grid[i].sort()
for (j in grid[i].size - lim..<grid[i].size) {
dp[a] = grid[i][j]
a++
}
}
dp.sort()
var sum = 0L
for (i in l - 1 downTo l - k) {
sum += dp[i].toLong()
}
return sum
}
}