Skip to content
Related Articles

Related Articles

Maximum sum of a Matrix where each value is from a unique row and column

View Discussion
Improve Article
Save Article
  • Difficulty Level : Hard
  • Last Updated : 01 Jun, 2021
View Discussion
Improve Article
Save Article

Given a matrix of size N X N, the task is to find maximum sum of this Matrix where each value picked is from a unique column for every row.
Examples: 
 

Input: matrix = [[3, 4, 4, 4],
                 [1, 3, 4, 4], 
                 [3, 2, 3, 4], 
                 [4, 4, 4, 4]]
Output: 16
Explanation:
Selecting (0, 1) from row 1 = 4
Selecting (1, 2) from row 2 = 4
Selecting (2, 3) from row 3 = 4
Selecting (3, 0) from row 4 = 4
Therefore, max sum = 4 + 4 + 4 + 4 = 16
                        
Input: matrix = [[0, 1, 0, 1], 
                 [3, 0, 0, 2], 
                 [1, 0, 2, 0], 
                 [0, 2, 0, 0]]
Output: 8
Explanation: 
Selecting (0, 3) from row 1 = 1
Selecting (1, 0) from row 2 = 3
Selecting (2, 2) from row 3 = 2
Selecting (3, 1) from row 4 = 2
Therefore, max sum = 1 + 3 + 2 + 2 = 8

 

Approach: 
 

  • Generate a numeric string of size N containing numbers from 1 to N
  • Find the permutation of this string (N!).
  • Now pairing is done between the permutations, such that each N! pairing has a unique column for every row.
  • Then calculate the sum of values for all the pairs.

Below is the implementation of the above approach:
 

Python3




# Python code for maximum sum of
# a Matrix where each value is
# from a unique row and column
 
# Permutations using library function
from itertools import permutations
 
# Function MaxSum to find
# maximum sum in matrix
def MaxSum(side, matrix):
         
    s = ''
    # Generating the string
    for i in range(0, side):
        s = s + str(i)
 
    # Permutations of s string
    permlist = permutations(s)
     
    # List all possible case
    cases = []
     
    # Append all possible case in cases list
    for perm in list(permlist):
        cases.append(''.join(perm))
     
    # List to store all Sums
    sum = []
     
    # Iterate over all case
    for c in cases:
        p = []
        tot = 0
        for i in range(0, side):
            p.append(matrix[int(s[i])][int(c[i])])
        p.sort()
        for i in range(side-1, -1, -1):
            tot = tot + p[i]
        sum.append(tot)
     
 
    # Maximum of sum list is
    # the max sum
    print(max(sum))
 
         
# Driver code
if __name__ == '__main__':
     
    side = 4
    matrix = [[3, 4, 4, 4], [1, 3, 4, 4], [3, 2, 3, 4], [4, 4, 4, 4]]
    MaxSum(side, matrix)
    side = 3
    matrix = [[1, 2, 3], [6, 5, 4], [7, 9, 8]]
    MaxSum(side, matrix)

Output: 

16
18

 

Time complexity: O(K), where K = N!
Auxiliary Space complexity: O(K), where K = N!
 


My Personal Notes arrow_drop_up
Recommended Articles
Page :

Start Your Coding Journey Now!