Nos dan un número n, necesitamos encontrar la suma máxima posible con la ayuda de la siguiente función:
F(n) = max( (F(n/2) + F(n/3) + F(n/4) + F(n/5)), n) . Para calcular F(n, ) podemos tener n como nuestro resultado o podemos dividir n en cuatro partes como en la definición de función dada. Esto se puede hacer todo el tiempo que podamos. Encuentre la suma máxima posible que puede obtener de un N dado. Nota: 1 no se puede dividir más, por lo que F (1) = 1 como caso base.
Ejemplos:
Input : n = 10 Output : MaxSum = 12 Explanation: f(10) = f(10/2) + f(10/3) + f(10/4) + f(10/5) = f(5) + f(3) + f(2) + f(2) = 12 5, 3 and 2 cannot be further divided. Input : n = 2 Output : MaxSum = 2
Enfoque: este problema se puede resolver con un enfoque recursivo, pero eso nos costará una gran complejidad debido a sus subproblemas superpuestos. Entonces aplicamos el concepto de programación dinámica para resolver esta pregunta de manera ascendente como:
C++
// CPP program for maximize result when // we have choice to divide or consider // as it is. #include <bits/stdc++.h> using namespace std; // function for calculating max possible result int maxDP(int n) { int res[n + 1]; res[0] = 0; res[1] = 1; // Compute remaining values in bottom // up manner. for (int i = 2; i <= n; i++) res[i] = max(i, (res[i / 2] + res[i / 3] + res[i / 4] + res[i / 5])); return res[n]; } // Driver Code int main() { int n = 60; cout << "MaxSum =" << maxDP(n); return 0; }
Java
// Java program for maximize result when // we have choice to divide or consider // as it is. import java.io.*; class GFG { // function for calculating max // possible result static int maxDP(int n) { int res[] = new int[n + 1]; res[0] = 0; res[1] = 1; // Compute remaining values in // bottom up manner. for (int i = 2; i <= n; i++) res[i] = Math.max(i, (res[i / 2] + res[i / 3] + res[i / 4] + res[i / 5])); return res[n]; } // Driver Code public static void main(String[] args) { int n = 60; System.out.println("MaxSum = " + maxDP(n)); } } // This code is contributed by vt_m
Python3
# Python3 code to maximize result when # we have choice to divide or consider # as it is. # function for calculating max # possible result def maxDP (n): res = list() res.append(0) res.append(1) # Compute remaining values in # bottom up manner. i = 2 while i<n + 1: res.append(max(i, (res[int(i / 2)] + res[int(i / 3)] + res[int(i / 4)] + res[int(i / 5)]))) i = i + 1 return res[n] # driver code n = 60 print("MaxSum =", maxDP(n)) # This code is contributed by "Sharad_Bhardwaj".
C#
// C# program for maximize result when // we have choice to divide or consider // as it is. using System; class GFG { // function for calculating max // possible result static int maxDP(int n) { int[] res = new int[n + 1]; res[0] = 0; res[1] = 1; // Compute remaining values in // bottom up manner. for (int i = 2; i <= n; i++) res[i] = Math.Max(i, (res[i / 2] + res[i / 3] + res[i / 4] + res[i / 5])); return res[n]; } // Driver code public static void Main() { int n = 60; Console.WriteLine("MaxSum = " + maxDP(n)); } } // This code is contributed by vt_m
PHP
<?php // PHP program to maximize // result when we have choice // to divide or consider as it is. // function for calculating // max possible result function maxDP ($n) { $res[0] = 0; $res[1] = 1; // Compute remaining values // in bottom up manner. for ($i = 2; $i <= $n; $i++) $res[$i] = max($i, ($res[$i / 2] + $res[$i / 3] + $res[$i / 4] + $res[$i / 5])); return $res[$n]; } // Driver Code $n = 60; echo "MaxSum =", maxDP ($n); // This code is contributed by aj_36 ?>
Javascript
<script> // javascript program for maximize result when // we have choice to divide or consider // as it is. // function for calculating max // possible result function maxDP(n) { let res = []; res[0] = 0; res[1] = 1; // Compute remaining values in // bottom up manner. for (let i = 2; i <= n; i++){ res[i] = Math.max(i, (res[Math.floor(i / 2)] + res[Math.floor(i / 3)] + res[Math.floor(i / 4)] + res[Math.floor(i / 5)])); } return res[n]; } // Driver code let n = 60; document.write("MaxSum = " + maxDP(n)); </script>
MaxSum =106
Complejidad temporal: O(N)
Espacio auxiliar: O(N)
Publicación traducida automáticamente
Artículo escrito por Shivam.Pradhan y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA