Você recebe uma array W [1], W [2],…, W [N]. Escolha K números entre eles de forma que a diferença absoluta entre a soma dos números escolhidos e a soma dos números restantes seja a maior possível.
Exemplos : 

Input : arr[] = [8, 4, 5, 2, 10]
            k = 2
Output: 17

Input : arr[] = [1, 1, 1, 1, 1, 1, 1, 1]
          k = 3
Output: 2

Existem duas possibilidades para obter a resposta desejada. Estes dois são: Escolha k números maiores ou Escolha k menores números. Escolha a opção mais adequada que se encaixa de acordo com os valores fornecidos. Isso ocorre porque há alguns casos em que a soma dos menores k números pode ser maior do que o restante da array e há alguns casos em que a soma dos maiores k números pode ser maior do que o restante da soma dos números.
Abordagem : 
 

  • Classifique a array fornecida.
  • Obtenha a soma de todos os números da array e armazene-a na soma
  • Obtenha a soma dos primeiros k números da array e armazene-a na soma1
  • Obtenha a soma dos últimos k números da array e armazene-a em sum2
  • Produza o resultado que é: max (abs (S1- (S-S1)), abs (S2- (S-S2)))
// C++ Program to find maximum weight
// difference
#include <iostream>
#include <algorithm>
using namespace std;
 
// return the max value of two numbers
 
int solve(int array[], int n, int k)
{
    // sort the given array
    sort(array, array + n);
 
    // Initializing the value to 0
    int sum = 0, sum1 = 0, sum2 = 0;
 
    // Getting the sum of the array
    for (int i = 0; i < n; i++) {
        sum += array[i];
    }
 
    // Getting the sum of smallest k elements
    for (int i = 0; i < k; i++) {
        sum1 += array[i];
    }
    sort(array, array+n, greater<int>());
    // Getting the sum of k largest elements
    for (int i = 0; i < k; i++) {
        sum2 += array[i];
    }
 
    // Returning the maximum possible difference.
    return max(abs(sum1 - (sum - sum1)), abs(sum2 -
                                  (sum - sum2)));
}
 
// Driver function
int main()
{
    int k = 2;
    int array[] = { 8, 4, 5, 2, 10 };
 
    // calculate the numbers of elements in the array
    int n = sizeof(array) / sizeof(array[0]);
 
    // call the solve function
    cout << solve(array, n, k);
 
    return 0;
}
// JAVA Code for Maximum Weight Difference
import java.util.*;
 
class GFG {
     
    public static int solve(int array[], int n,
                                        int k)
    {
        // sort the given array
        Arrays.sort(array);
      
        // Initializing the value to 0
        int sum = 0, sum1 = 0, sum2 = 0;
      
        // Getting the sum of the array
        for (int i = 0; i < n; i++) {
            sum += array[i];
        }
      
        // Getting the sum of first k elements
        for (int i = 0; i < k; i++) {
            sum1 += array[i];
        }
      
        // Getting the sum of (n-k) elements
        for (int i = k; i < n; i++) {
            sum2 += array[i];
        }
      
        // Returning the maximum possible difference.
        return Math.max(Math.abs(sum1 - (sum - sum1)),
                       Math.abs(sum2 - (sum - sum2)));
    }
     
    /* Driver program to test above function */
    public static void main(String[] args)
    {
        int k = 2;
        int array[] = { 8, 4, 5, 2, 10 };
      
        // calculate the numbers of elements
        // in the array
        int n = array.length;
      
        // call the solve function
        System.out.print(solve(array, n, k));
             
    }
}
// This code is contributed by Arnav Kr. Mandal.
def solve(array, k):
   
  # Sorting array
  array.sort()
 
  # Getting the sum of all the elements
  s = sum(array)
 
  # Getting the sum of smallest k elements
  s1 = sum(array[:k])
 
  # Getting the sum greatest k elements
  array.sort(reverse=True)
  s2 = sum(array[:k])
 
  # Returning the maximum possible difference
  return max(abs(s1-(s-s1)), abs(s2-(s-s2)))
   
# Driver function
k = 2
array =[8, 4, 5, 2, 10]
print(solve(array, k))
// C# Code for Maximum Weight Difference
using System;
 
class GFG {
     
    public static int solve(int []array, int n,
                                        int k)
    {
         
        // sort the given array
        Array.Sort(array);
     
        // Initializing the value to 0
        int sum = 0, sum1 = 0, sum2 = 0;
     
        // Getting the sum of the array
        for (int i = 0; i < n; i++) {
            sum += array[i];
        }
     
        // Getting the sum of first k elements
        for (int i = 0; i < k; i++) {
            sum1 += array[i];
        }
     
        // Getting the sum of (n-k) elements
        for (int i = k; i < n; i++) {
            sum2 += array[i];
        }
     
        // Returning the maximum possible difference.
        return Math.Max(Math.Abs(sum1 - (sum - sum1)),
                        Math.Abs(sum2 - (sum - sum2)));
    }
     
    /* Driver program to test above function */
    public static void Main()
    {
        int k = 2;
        int []array = { 8, 4, 5, 2, 10 };
     
        // calculate the numbers of elements
        // in the array
        int n = array.Length;
     
        // call the solve function
        Console.WriteLine(solve(array, n, k));
             
    }
}
 
// This code is contributed by vt_m.
<?php
// PHP Program to find maximum weight
// difference
 
// return the max value of two numbers
function maxi($a, $b)
{
    if ($a > $b)
    {
        return $a;
    }
    else
    {
        return $b;
    }
}
 
function solve(&$arr, $n, $k)
{
    // sort the given array
    sort($arr);
 
    // Initializing the value to 0
    $sum = 0;
    $sum1 = 0;
    $sum2 = 0;
 
    // Getting the sum of the array
    for ($i = 0; $i < $n; $i++)
    {
        $sum += $arr[$i];
    }
 
    // Getting the sum of first k elements
    for ($i = 0; $i < $k; $i++)
    {
        $sum1 += $arr[$i];
    }
 
    // Getting the sum of (n-k) elements
    for ($i = $k; $i < $n; $i++)
    {
        $sum2 += $arr[$i];
    }
 
    // Returning the maximum possible difference.
    return maxi(abs($sum1 - ($sum - $sum1)),
                abs($sum2 - ($sum - $sum2)));
}
 
// DriverCode
$k = 2;
$arr = array(8, 4, 5, 2, 10 );
 
// calculate the numbers of
// elements in the array
$n = sizeof($arr);
 
// call the solve function
echo (solve($arr, $n, $k));
 
// This code is contributed
// by Shivi_Aggarwal
?>
<script>
 
    // JavaScript Code for Maximum Weight Difference
     
    function solve(array, n, k)
    {
           
        // sort the given array
        array.sort(function(a, b){return a - b});
       
        // Initializing the value to 0
        let sum = 0, sum1 = 0, sum2 = 0;
       
        // Getting the sum of the array
        for (let i = 0; i < n; i++) {
            sum += array[i];
        }
       
        // Getting the sum of first k elements
        for (let i = 0; i < k; i++) {
            sum1 += array[i];
        }
       
        // Getting the sum of (n-k) elements
        for (let i = k; i < n; i++) {
            sum2 += array[i];
        }
       
        // Returning the maximum possible difference.
        return Math.max(Math.abs(sum1 - (sum - sum1)),
                        Math.abs(sum2 - (sum - sum2)));
    }
     
    let k = 2;
    let array = [ 8, 4, 5, 2, 10 ];
 
    // calculate the numbers of elements
    // in the array
    let n = array.length;
 
    // call the solve function
    document.write(solve(array, n, k));
     
</script>
Saída

17

Este artigo é uma contribuição de Rishabh Bansal . Se você gosta de GeeksforGeeks e gostaria de contribuir, você também pode escrever um artigo usando write.geeksforgeeks.org ou enviar seu artigo para review-team@geeksforgeeks.org. Veja o seu artigo na página principal do GeeksforGeeks e ajude outros Geeks.
Escreva comentários se encontrar algo incorreto ou se quiser compartilhar mais informações sobre o tópico discutido acima.