# Minimize the sum of product of two arrays with permutations allowed

Given two arrays, A and B, of equal size n, the task is to find the minimum value of A[0] * B[0] + A[1] * B[1] +…+ A[n-1] * B[n-1]. Shuffling of elements of arrays A and B is allowed.

Examples:

```Input : A[] = {3, 1, 1} and B[] = {6, 5, 4}.
Output : 23
Minimum value of S = 1*6 + 1*5 + 3*4 = 23.

Input : A[] = { 6, 1, 9, 5, 4 } and B[] = { 3, 4, 8, 2, 4 }
Output : 80.
Minimum value of S = 1*8 + 4*4 + 5*4 + 6*3 + 9*2 = 80.
```

## Recommended: Please solve it on “PRACTICE” first, before moving on to the solution.

The idea is to multiply minimum element of one array to maximum element of another array. Algorithm to solve this problem:

1. Sort both the arrays A and B.
2. Traverse the array and for each element, multiply A[i] and B[n – i – 1] and add to the total.

Below is C++ implementation of this approach:

## C/C++

```// C++ program to calculate minimum sum of product
// of two arrays.
#include<bits/stdc++.h>
using namespace std;

// Returns minimum sum of product of two arrays
// with permutations allowed
int minValue(int A[], int B[], int n)
{
// Sort A and B so that minimum and maximum
// value can easily be fetched.
sort(A, A + n);
sort(B, B + n);

// Multiplying minimum value of A and maximum
// value of B
int result = 0;
for (int i = 0; i < n; i++)
result += (A[i] * B[n - i - 1]);

return result;
}

// Driven Program
int main()
{
int A[] = {3, 1, 1};
int B[] = {6, 5, 4};
int n = sizeof(A)/sizeof(A[0]);
cout << minValue(A, B, n) << endl;
return 0;
}
```

## Python

```# Python program to calculate minimum sum of product
# of two arrays.

# Returns minimum sum of product of two arrays
# with permutations allowed
def minValue(A, B, n):
# Sort A and B so that minimum and maximum
# value can easily be fetched.
sorted(A)
sorted(B)

# Multiplying minimum value of A and maximum
# value of B
result = 0
for i in range(n):
result += (A[i] * B[n - i - 1])

return result

# Driven Program
A = [3, 1, 1]
B = [6, 5, 4]
n = len(A)
print minValue(A, B, n)

# Contributed by: Afzal Ansari
```

Output:

```23
```

Time Complexity : O(n log n).

This article is contributed by Anuj Chauhan(anuj0503). If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

# GATE CS Corner    Company Wise Coding Practice

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.
1.7 Average Difficulty : 1.7/5.0
Based on 13 vote(s)