Skip to content
Related Articles

Related Articles

Maximum sum of a Matrix where each value is from a unique row and column
  • Last Updated : 08 Apr, 2020

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:

  • Genrate 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:

filter_none

edit
close

play_arrow

link
brightness_4
code

# 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)

chevron_right


Output:



16
18

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

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

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.

My Personal Notes arrow_drop_up
Recommended Articles
Page :