Minimizar la suma de cuadrados de suma de N/2 pares formados por N números

Dados N números (N es un número par). Divida los N números en N/2 pares de tal manera que la suma de los cuadrados de la suma de los números en pares sea mínima. La tarea es imprimir la suma mínima. 
Ejemplos: 
 

Input: a[] = {8, 5, 2, 3}
Output: 164 
Divide them into two groups of {2, 8} and {3, 5}
to give (2+8)2 + (3+5)2 = 164   

Input: a[] = {1, 1, 1, 2, 2, 2}
Output: 27 

Enfoque: La tarea es minimizar la suma de los cuadrados, por lo tanto, dividimos el número más pequeño y el más grande en el primer grupo y el segundo más pequeño y el segundo más grande en el segundo grupo, y así sucesivamente hasta que se formen N/2 grupos. Suma los números y almacena la suma de los cuadrados de ellos que será la respuesta final. 
A continuación se muestra la implementación del enfoque anterior: 
 

C++

// C++ program to minimize the sum
// of squares of sum of numbers
// of N/2 groups of N numbers
 
#include <bits/stdc++.h>
using namespace std;
 
// Function that returns the minimize sum
// of square of sum of numbers of every group
int findMinimal(int a[], int n)
{
    // Sort the array elements
    sort(a, a + n);
 
    int sum = 0;
 
    // Iterate for the first half of array
    for (int i = 0; i < n / 2; i++)
        sum += (a[i] + a[n - i - 1])
                * (a[i] + a[n - i - 1]);
 
    return sum;
}
 
// Driver Code
int main()
{
    int a[] = { 8, 5, 2, 3 };
    int n = sizeof(a) / sizeof(a[0]);
  
    cout << findMinimal(a, n);
  
    return 0;
}

Java

// Java program to minimize the sum
// of squares of sum of numbers
// of N/2 groups of N numbers
import java.util.Arrays;
 
class GFG
{
 
    // Function that returns the minimize sum
    // of square of sum of numbers of every group
    static int findMinimal(int []a, int n)
    {
        // Sort the array elements
        Arrays.sort(a);
     
        int sum = 0;
     
        // Iterate for the first half of array
        for (int i = 0; i < n / 2; i++)
            sum += (a[i] + a[n - i - 1]) *
                (a[i] + a[n - i - 1]);
     
        return sum;
    }
     
    // Driver Code
    public static void main(String str[])
    {
        int []a = { 8, 5, 2, 3 };
        int n = a.length;
        System.out.println(findMinimal(a, n));
    }
}
 
// This code is contributed by Ryuga

Python 3

# Python 3 program to minimize the sum
# of squares of sum of numbers
# of N/2 groups of N numbers
 
# Function that returns the minimize sum
# of square of sum of numbers of every group
def findMinimal(a, n):
 
    # Sort the array elements
    a.sort()
 
    sum = 0
 
    # Iterate for the first half of array
    for i in range( n // 2):
        sum += ((a[i] + a[n - i - 1]) *
                (a[i] + a[n - i - 1]))
 
    return sum
 
# Driver Code
if __name__ == "__main__":
     
    a = [ 8, 5, 2, 3 ]
    n = len(a)
 
    print(findMinimal(a, n))
 
# This code is contributed by ita_c

C#

// C# program to minimize the sum
// of squares of sum of numbers
// of N/2 groups of N numbers
using System;
 
class GFG
{
 
// Function that returns the minimize sum
// of square of sum of numbers of every group
static int findMinimal(int []a, int n)
{
    // Sort the array elements
    Array.Sort(a);
 
    int sum = 0;
 
    // Iterate for the first half of array
    for (int i = 0; i < n / 2; i++)
        sum += (a[i] + a[n - i - 1]) *
               (a[i] + a[n - i - 1]);
 
    return sum;
}
 
// Driver Code
public static void Main()
{
    int []a = { 8, 5, 2, 3 };
    int n = a.Length;
 
    Console.Write(findMinimal(a, n));
}
}
 
// This code is contributed
// by Akanksha Rai

PHP

<?php
// PHP program to minimize the sum
// of squares of sum of numbers
// of N/2 groups of N numbers
 
// Function that returns the minimize sum
// of square of sum of numbers of every group
function findMinimal($a, $n)
{
    // Sort the array elements
    sort($a);
 
    $sum = 0;
 
    // Iterate for the first half of array
    for ($i = 0; $i < $n / 2; $i++)
        $sum += ($a[$i] + $a[$n - $i - 1]) *
                ($a[$i] + $a[$n - $i - 1]);
 
    return $sum;
}
 
// Driver Code
$a = array(8, 5, 2, 3 );
$n = sizeof($a);
 
echo findMinimal($a, $n);
 
// This code is contributed by ajit
?>

Javascript

<script>
// java script  program to minimize the sum
// of squares of sum of numbers
// of N/2 groups of N numbers
 
// Function that returns the minimize sum
// of square of sum of numbers of every group
function findMinimal(a, n)
{
 
    // Sort the array elements
    a.sort();
 
    let sum = 0;
 
    // Iterate for the first half of array
    for (let i = 0; i < n / 2; i++)
        sum += (a[i] + a[n - i - 1]) *
                (a[i] + a[n - i - 1]);
 
    return sum;
}
 
// Driver Code
let a = [8,5,2,3];
let n = a.length;
 
document.write( findMinimal(a, n));
 
// This code is contributed by sravan kumar G
</script>
Producción: 

164

 

Complejidad de tiempo: O(N*logN), ya que estamos usando una función de clasificación incorporada que costará N*logN de tiempo. Donde N es el número de elementos de la array.
Espacio auxiliar: O(1), ya que no estamos utilizando ningún espacio adicional.
 

Publicación traducida automáticamente

Artículo escrito por Striver y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *