Split given arrays into subarrays to maximize the sum of maximum and minimum in each subarrays Last Updated : 03 Mar, 2022 Comments Improve Suggest changes Like Article Like Report Given an array arr[] consisting of N integers, the task is to maximize the sum of the difference of the maximum and minimum in each subarrays by splitting the given array into non-overlapping subarrays. Examples: Input: arr[] = {8, 1, 7, 9, 2}Output: 14Explanation:Split the given array arr[] as {8, 1}, {7, 9, 2}. Now, the sum of the difference maximum and minimum for all the subarrays is (8 - 7) + (9 - 2) = 7 + 7 = 14, which is maximum among all possible combinations. Input: arr[] = {1, 2, 1, 0, 5}Output: 6 Approach: The given problem can be solved by considering all possible breaking of subarrays and find the sum of the difference of the maximum and minimum in each subarray and maximize this value. This idea can be implemented using Dynamic Programming. Follow the steps below to solve the given problem: Initialize an array, dp[] with all elements as 0 such that dp[i] stores the sum of all possible splitting of the first i elements such that the sum of the difference of the maximum and minimum in each subarray is maximum.Traverse the given array arr[] using the variable i and perform the following steps:Choose the current value as the maximum and the minimum element for the subarrays and store it in variables, say minValue and maxValue respectively.Iterate a loop over the range [0, i] using the variable j and perform the following steps:Update the minValue and maxValue with the array element arr[j].If the value of j is positive then update dp[i] as the maximum of dp[i] and (maxValue - minValue + dp[j - 1]). Otherwise, update dp[i] as the maximum of dp[i] and (maxValue - minValue).After completing the above steps, print the value of dp[N - 1] as the resultant maximum value. Below is the implementation of the above approach: C++ // C++ program for the above approach #include <bits/stdc++.h> using namespace std; // Function to find the maximum sum of // differences of subarrays by splitting // array into non-overlapping subarrays int maxDiffSum(int arr[], int n) { // Stores the answer for prefix // and initialize with zero int dp[n]; memset(dp, 0, sizeof(dp)); // Assume i-th index as right endpoint for (int i = 0; i < n; i++) { // Choose the current value as // the maximum and minimum int maxVal = arr[i], minVal = arr[i]; // Find the left endpoint and // update the array dp[] for (int j = i; j >= 0; j--) { minVal = min(minVal, arr[j]); maxVal = max(maxVal, arr[j]); if (j - 1 >= 0) dp[i] = max( dp[i], maxVal - minVal + dp[j - 1]); else dp[i] = max( dp[i], maxVal - minVal); } } // Return answer return dp[n - 1]; } // Driver Code int main() { int arr[] = { 8, 1, 7, 9, 2 }; int N = sizeof(arr) / sizeof(arr[0]); cout << maxDiffSum(arr, N); return 0; } Java // Java program for the above approach import java.io.*; class GFG { // Function to find the maximum sum of // differences of subarrays by splitting // array into non-overlapping subarrays static int maxDiffSum(int[] arr, int n) { // Stores the answer for prefix // and initialize with zero int[] dp = new int[n]; // Assume i-th index as right endpoint for (int i = 0; i < n; i++) { // Choose the current value as // the maximum and minimum int maxVal = arr[i], minVal = arr[i]; // Find the left endpoint and // update the array dp[] for (int j = i; j >= 0; j--) { minVal = Math.min(minVal, arr[j]); maxVal = Math.max(maxVal, arr[j]); if (j - 1 >= 0) dp[i] = Math.max( dp[i], maxVal - minVal + dp[j - 1]); else dp[i] = Math.max(dp[i], maxVal - minVal); } } // Return answer return dp[n - 1]; } // Driver Code public static void main(String []args) { int[] arr = { 8, 1, 7, 9, 2 }; int N = arr.length; System.out.print(maxDiffSum(arr, N)); } } // This code is contributed by shivanisinghss2110 Python3 # Python Program to implement # the above approach # Function to find the maximum sum of # differences of subarrays by splitting # array into non-overlapping subarrays def maxDiffSum(arr, n): # Stores the answer for prefix # and initialize with zero dp = [0] * n # Assume i-th index as right endpoint for i in range(n): # Choose the current value as # the maximum and minimum maxVal = arr[i] minVal = arr[i] # Find the left endpoint and # update the array dp[] for j in range(i, -1, -1): minVal = min(minVal, arr[j]) maxVal = max(maxVal, arr[j]) if (j - 1 >= 0): dp[i] = max( dp[i], maxVal - minVal + dp[j - 1]) else: dp[i] = max( dp[i], maxVal - minVal) # Return answer return dp[n - 1] # Driver Code arr = [8, 1, 7, 9, 2] N = len(arr) print(maxDiffSum(arr, N)) # This code is contributed by _saurabh_jaiswal C# // C# program for the above approach using System; class GFG { // Function to find the maximum sum of // differences of subarrays by splitting // array into non-overlapping subarrays static int maxDiffSum(int[] arr, int n) { // Stores the answer for prefix // and initialize with zero int[] dp = new int[n]; // Assume i-th index as right endpoint for (int i = 0; i < n; i++) { // Choose the current value as // the maximum and minimum int maxVal = arr[i], minVal = arr[i]; // Find the left endpoint and // update the array dp[] for (int j = i; j >= 0; j--) { minVal = Math.Min(minVal, arr[j]); maxVal = Math.Max(maxVal, arr[j]); if (j - 1 >= 0) dp[i] = Math.Max( dp[i], maxVal - minVal + dp[j - 1]); else dp[i] = Math.Max(dp[i], maxVal - minVal); } } // Return answer return dp[n - 1]; } // Driver Code public static void Main() { int[] arr = { 8, 1, 7, 9, 2 }; int N = arr.Length; Console.WriteLine(maxDiffSum(arr, N)); } } // This code is contributed by ukasp. JavaScript <script> // JavaScript Program to implement // the above approach // Function to find the maximum sum of // differences of subarrays by splitting // array into non-overlapping subarrays function maxDiffSum(arr, n) { // Stores the answer for prefix // and initialize with zero let dp = new Array(n).fill(0); // Assume i-th index as right endpoint for (let i = 0; i < n; i++) { // Choose the current value as // the maximum and minimum let maxVal = arr[i], minVal = arr[i]; // Find the left endpoint and // update the array dp[] for (let j = i; j >= 0; j--) { minVal = Math.min(minVal, arr[j]); maxVal = Math.max(maxVal, arr[j]); if (j - 1 >= 0) dp[i] = Math.max( dp[i], maxVal - minVal + dp[j - 1]); else dp[i] = Math.max( dp[i], maxVal - minVal); } } // Return answer return dp[n - 1]; } // Driver Code let arr = [8, 1, 7, 9, 2]; let N = arr.length; document.write(maxDiffSum(arr, N)); // This code is contributed by Potta Lokesh </script> Output: 14 Time Complexity: O(N2) Auxiliary Space: O(N) Comment More infoAdvertise with us Next Article Split given arrays into subarrays to maximize the sum of maximum and minimum in each subarrays H himanshu77 Follow Improve Article Tags : Dynamic Programming Mathematical DSA Arrays subarray +1 More Practice Tags : ArraysDynamic ProgrammingMathematical Similar Reads Split array into K subsets to maximize their sum of maximums and minimums Given an integer K and an array A[ ] whose length is multiple of K, the task is to split the elements of the given array into K subsets, each having an equal number of elements, such that the sum of the maximum and minimum elements of each subset is the maximum summation possible. Examples: Input: K 6 min read Split array into K subarrays such that sum of maximum of all subarrays is maximized Given an array arr[] of size N and a number K, the task is to partition the given array into K contiguous subarrays such that the sum of the maximum of each subarray is the maximum possible. If it is possible to split the array in such a manner, then print the maximum possible sum. Otherwise, print 10 min read Split into K subarrays to minimize the maximum sum of all subarrays Given an array arr[] and a number k, split the given array into k subarrays such that the maximum subarray sum achievable out of k subarrays formed is the minimum possible. The task is to find that possible subarray sum.Examples:Input: arr[] = [1, 2, 3, 4], k = 3 Output: 4 Explanation: Optimal Split 11 min read Split array into subarrays such that sum of difference between their maximums and minimums is maximum Given an array arr[] consisting of N integers, the task is to split the array into subarrays such that the sum of the difference between the maximum and minimum elements for all the subarrays is maximum. Examples : Input: arr[] = {8, 1, 7, 9, 2}Output: 14Explanation:Consider splitting the given arra 6 min read Split array into K non-empty subsets such that sum of their maximums and minimums is maximized Given two arrays arr[] and S[] consisting of N and K integers, the task is to find the maximum sum of minimum and maximum of each subset after splitting the array into K subsets such that the size of each subset is equal to one of the elements in the array S[]. Examples: Input: arr[] = {1, 13, 7, 17 7 min read Split array into K Subarrays to minimize sum of difference between min and max Given a sorted array arr[] of size N and integer K, the task is to split the array into K non-empty subarrays such that the sum of the difference between the maximum element and the minimum element of each subarray is minimized. Note: Every element of the array must be included in one subarray and e 6 min read Split array to three subarrays such that sum of first and third subarray is equal and maximum Given an array of N integers, the task is to print the sum of the first subarray by splitting the array into exactly three subarrays such that the sum of the first and third subarray elements are equal and the maximum. Note: All the elements must belong to a subarray and the subarrays can also be em 13 min read Maximize the maximum among minimum of K consecutive sub-arrays Given an integer K and an array arr[], the task is to split the array arr[] into K consecutive subarrays to find the maximum possible value of the maximum among the minimum value of K consecutive sub-arrays. Examples: Input: arr[] = {1, 2, 3, 4, 5}, K = 2 Output: 5 Split the array as [1, 2, 3, 4] an 9 min read Split a given array into K subarrays minimizing the difference between their maximum and minimum Given a sorted array arr[] of N integers and an integer K, the task is to split the array into K subarrays such that the sum of the difference of maximum and minimum element of each subarray is minimized. Examples: Input: arr[] = {1, 3, 3, 7}, K = 4 Output: 0 Explanation: The given array can be spli 6 min read Distribute given arrays into K sets such that total sum of maximum and minimum elements of all sets is maximum Given two arrays, the first arr[] of size N and the second brr[] of size K. The task is to divide the first array arr[] into K sets such that the i-th set should contain brr[i] elements from the second array brr[], and the total sum of maximum and minimum elements of all sets is maximum. Examples: I 8 min read Like