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:
C++
// C++ code for maximum sum of// a Matrix where each value is// from a unique row and column#include <algorithm>#include <iostream>#include <string>#include <vector>using namespace std;// Function to find the maximum sum in matrixvoid MaxSum(int side, vector<vector<int> > matrix){ string s; for (int i = 0; i < side; i++) { s += to_string(i); } // Permutations of s string vector<string> cases; do { cases.push_back(s); } while (next_permutation(s.begin(), s.end())); // List to store all sums vector<int> sum; // Iterate over all cases for (auto c : cases) { vector<int> p; int tot = 0; for (int i = 0; i < side; i++) { p.push_back(matrix[i] - '0']); } sort(p.begin(), p.end()); for (int i = side - 1; i >= 0; i--) { tot += p[i]; } sum.push_back(tot); } // Maximum of sum list is the max sum cout << *max_element(sum.begin(), sum.end()) << endl;}// Driver codeint main(){ int side = 4; vector<vector<int> > 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); return 0;}// This code is contributed by rutikbhosale |
Java
import java.util.ArrayList;import java.util.Collections;import java.util.List;import java.util.Scanner;public class Main { // Function to find the maximum sum in matrix public static void maxSum(int side, int[][] matrix) { StringBuilder s = new StringBuilder(); for (int i = 0; i < side; i++) { s.append(i); } // Permutations of s string List<String> cases = new ArrayList<>(); permutation(s.toString(), cases); // List to store all sums List<Integer> sum = new ArrayList<>(); // Iterate over all cases for (String c : cases) { List<Integer> p = new ArrayList<>(); int tot = 0; for (int i = 0; i < side; i++) { p.add(matrix[i]); } Collections.sort(p); for (int i = side - 1; i >= 0; i--) { tot += p.get(i); } sum.add(tot); } // Maximum of sum list is the max sum System.out.println(Collections.max(sum)); } // Function to generate all permutations of a string public static void permutation(String str, List<String> cases) { permutation("", str, cases); } private static void permutation(String prefix, String str, List<String> cases) { int n = str.length(); if (n == 0) { cases.add(prefix); } else { for (int i = 0; i < n; i++) { permutation(prefix + str.charAt(i), str.substring(0, i) + str.substring(i + 1), cases); } } } // Driver code public static void main(String[] args) { int side = 4; int[][] matrix = { { 3, 4, 4, 4 }, { 1, 3, 4, 4 }, { 3, 2, 3, 4 }, { 4, 4, 4, 4 } }; maxSum(side, matrix); side = 3; matrix = new int[][] { { 1, 2, 3 }, { 6, 5, 4 }, { 7, 9, 8 } }; maxSum(side, matrix); }} |
Python3
# Python code for maximum sum of # a Matrix where each value is # from a unique row and column# Permutations using library functionfrom itertools import permutations# Function MaxSum to find# maximum sum in matrixdef 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) |
C#
using System;using System.Collections.Generic;using System.Linq;public class Gfg{ // Function to find the maximum sum in matrix public static void MaxSum(int side, List<List<int>> matrix) { string s = ""; for (int i = 0; i < side; i++) { s += i.ToString(); } // Permutations of s string List<string> cases = new List<string>(); do { cases.Add(s); } while (NextPermutation(ref s)); // List to store all sums List<int> sum = new List<int>(); // Iterate over all cases foreach (var c in cases) { List<int> p = new List<int>(); int tot = 0; for (int i = 0; i < side; i++) { p.Add(matrix[i][int.Parse(c[i].ToString())]); } p.Sort(); for (int i = side - 1; i >= 0; i--) { tot += p[i]; } sum.Add(tot); } // Maximum of sum list is the max sum Console.WriteLine(sum.Max()); } // Helper function to generate permutations of a string private static bool NextPermutation(ref string s) { char[] a = s.ToCharArray(); int n = a.Length; int i = n - 2; while (i >= 0 && a[i] >= a[i + 1]) i--; if (i < 0) return false; int j = n - 1; while (a[j] <= a[i]) j--; char temp = a[i]; a[i] = a[j]; a[j] = temp; Array.Reverse(a, i + 1, n - i - 1); s = new string(a); return true; } // Driver code public static void Main() { int side = 4; List<List<int>> matrix = new List<List<int>> { new List<int> { 3, 4, 4, 4 }, new List<int> { 1, 3, 4, 4 }, new List<int> { 3, 2, 3, 4 }, new List<int> { 4, 4, 4, 4 } }; MaxSum(side, matrix); side = 3; matrix = new List<List<int>> { new List<int> { 1, 2, 3 }, new List<int> { 6, 5, 4 }, new List<int> { 7, 9, 8 } }; MaxSum(side, matrix); }} |
Javascript
// JavaScript code for maximum sum of// a Matrix where each value is// from a unique row and column// Function MaxSum to find// maximum sum in matrixfunction MaxSum(side, matrix) { let s = ''; // Generating the string for (let i = 0; i < side; i++) { s = s + i; } // Permutations of s string let permlist = permutation(s); // List all possible case let cases = []; // Append all possible case in cases list for (let i = 0; i < permlist.length; i++) { cases.push(permlist[i]); } // List to store all Sums let sum = []; // Iterate over all case for (let i = 0; i < cases.length; i++) { let c = cases[i]; let p = []; let tot = 0; for (let j = 0; j < side; j++) { p.push(matrix[s[j]]]); } p.sort(); for (let j = side - 1; j >= 0; j--) { tot = tot + p[j]; } sum.push(tot); } // Maximum of sum list is // the max sum console.log(Math.max(...sum));}// Driver code function main() { let side = 4; let 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);}// permutation functionfunction permutation(string) { if (string.length === 0) return []; if (string.length === 1) return [string]; let result = []; for (let i = 0; i < string.length; i++) { let firstChar = string[i]; let charsLeft = string.substring(0, i) + string.substring(i + 1); let innerPermutations = permutation(charsLeft); for (let j = 0; j < innerPermutations.length; j++) { result.push(firstChar + innerPermutations[j]); } } return result;}main();// This code is contributed by Prince Kumar |
16 18
Time complexity: O(K), where K = N!
Auxiliary Space complexity: O(K), where K = N!
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!

… [Trackback]
[…] Find More Info here on that Topic: geeksforgeeks.org/maximum-sum-of-a-matrix-where-each-value-is-from-a-unique-row-and-column/ […]
… [Trackback]
[…] There you can find 16293 additional Info to that Topic: geeksforgeeks.org/maximum-sum-of-a-matrix-where-each-value-is-from-a-unique-row-and-column/ […]