You are given a matrix of ‘N’ rows and ‘M’ columns and a non-negative integer ‘K’. You have to find the minimum possible sum of all elements in each submatrix after performing most ‘K’ decrements.
Note:You can’t decrease a number below 0.
For example:
You are given ‘K’ = 5, and matrix
‘mat’ = [[1, 2, 3],
[4, 0, 5],
[2 , 7, 4]]
You can do 3 operations on element 7 and 2 operations on element 5. Then the sum of all submatrices will be 246.
The first line of input contains a single integer ‘T’, denoting the number of test cases.
The first line of each test case contains three space-separated integers ‘N’, ‘M’, and ‘K’, representing the rows, columns of the matrix, and the given integer.
The following ‘N’ lines of input contain ‘M’ space-separated integers representing the matrix elements.
Output Format:
For each test case, print a single integer representing the minimum possible sum of all elements in each submatrix. Print the answer in the modulo 10^9 + 7.
Print a single line for each test case.
1 <= T <= 10
1 <= N, M <= 500
0 <= K <= 10^12
1<= mat[i][j] <= 10^6
Time Limit: 1 sec
2
3 3 5
1 2 3
4 0 5
2 7 4
1 2 1
3 4
246
12
For the first test case, given K = 5, and matrix
‘mat’ = [[1, 2, 3],
[4, 0, 5],
[2 , 7, 4]]
You can do three operations on element 7 and 2 operations on element 5. Then the sum of all submatrices will be 246.
For the second test case, given K = 1 and the matrix
mat = [[3, 4]]
You can do one operation on element 4. Then the sum of all submatrices will be 12.
2
2 2 4
1 2
3 4
3 3 3
1 2 3
3 4 5
5 6 7
24
368
Count the contribution of each element in the minimum sum.
In this approach, we will count the number of times a given element will count towards the cumulative submatrix sum for each element in the matrix. We will maintain the variables to count from top-left, top-right, bottom-left, bottom-right.
Then we sort the array in reverse order according to the count, and for each, we will subtract K and add it to the answer.
Algorithm:
O(N*M*log(N*M)), Where N and M are the number rows and columns in the matrix.
We are iterating through every matrix element, which will cost O(N*M) time. We also sort all the elements in the array that takes O(N*M*log(N*M)) time. Hence the final time complexity is O(N*M*log(N*M)).
O(N*M), Where N and M are the number rows and columns in the matrix.
We are maintaining the array, which will have N*M elements. Hence the overall space complexity is O(N*M).