Dada una array A que tiene N elementos y dos números enteros L y R donde, y . Puede elegir cualquier elemento de la array (digamos una x ) y eliminarlo , y también eliminar todos los elementos iguales a x +1 , x +2 … a x + R y x -1 , x -2 … a x -L de la array. Este paso costará x puntos. La tarea es maximizar el costo total después de eliminar todos los elementos de la array. Ejemplos:
Input : 2 1 2 3 2 2 1 L = 1, R = 1 Output : 8 We select 2 to delete, then (2-1)=1 and (2+1)=3 will need to be deleted, for given L and R range respectively. Repeat this until 2 is completely removed. So, total cost = 2*4 = 8. Input : 2 4 2 9 5 L = 1, R = 2 Output : 18 We select 2 to delete, then 5 and then 9. So total cost = 2*2 + 5 + 9 = 18.
Planteamiento: Encontraremos el conteo de todos los elementos. Ahora supongamos que se selecciona un elemento X y luego se eliminarán todos los elementos en el rango [XL, X+R]. Ahora seleccionamos el rango mínimo de L y R y encontramos hasta qué elementos se eliminarán cuando se seleccione el elemento X. Nuestros resultados serán el máximo de elementos eliminados previamente y cuando se elimine el elemento X. Usaremos la programación dinámica para almacenar el resultado de los elementos eliminados previamente y usarlos más.
C++
// C++ program to find maximum cost after // deleting all the elements form the array #include <bits/stdc++.h> using namespace std; // function to return maximum cost obtained int maxCost(int a[], int n, int l, int r) { int mx = 0, k; // find maximum element of the array. for (int i = 0; i < n; ++i) mx = max(mx, a[i]); // initialize count of all elements to zero. int count[mx + 1]; memset(count, 0, sizeof(count)); // calculate frequency of all elements of array. for (int i = 0; i < n; i++) count[a[i]]++; // stores cost of deleted elements. int res[mx + 1]; res[0] = 0; // selecting minimum range from L and R. l = min(l, r); for (int num = 1; num <= mx; num++) { // finds upto which elements are to be // deleted when element num is selected. k = max(num - l - 1, 0); // get maximum when selecting element num or not. res[num] = max(res[num - 1], num * count[num] + res[k]); } return res[mx]; } // Driver program int main() { int a[] = { 2, 1, 2, 3, 2, 2, 1 }, l = 1, r = 1; // size of array int n = sizeof(a) / sizeof(a[0]); // function call to find maximum cost cout << maxCost(a, n, l, r); return 0; }
Java
//Java program to find maximum cost after //deleting all the elements form the array public class GFG { //function to return maximum cost obtained static int maxCost(int a[], int n, int l, int r) { int mx = 0, k; // find maximum element of the array. for (int i = 0; i < n; ++i) mx = Math.max(mx, a[i]); // initialize count of all elements to zero. int[] count = new int[mx + 1]; for(int i = 0; i < count.length; i++) count[i] = 0; // calculate frequency of all elements of array. for (int i = 0; i < n; i++) count[a[i]]++; // stores cost of deleted elements. int[] res = new int[mx + 1]; res[0] = 0; // selecting minimum range from L and R. l = Math.min(l, r); for (int num = 1; num <= mx; num++) { // finds upto which elements are to be // deleted when element num is selected. k = Math.max(num - l - 1, 0); // get maximum when selecting element num or not. res[num] = Math.max(res[num - 1], num * count[num] + res[k]); } return res[mx]; } //Driver program public static void main(String[] args) { int a[] = { 2, 1, 2, 3, 2, 2, 1 }, l = 1, r = 1; // size of array int n = a.length; // function call to find maximum cost System.out.println(maxCost(a, n, l, r)); } }
Python 3
# Python 3 Program to find maximum cost after # deleting all the elements form the array # function to return maximum cost obtained def maxCost(a, n, l, r) : mx = 0 # find maximum element of the array. for i in range(n) : mx = max(mx, a[i]) # create and initialize count of all elements to zero. count = [0] * (mx + 1) # calculate frequency of all elements of array. for i in range(n) : count[a[i]] += 1 # stores cost of deleted elements. res = [0] * (mx + 1) res[0] = 0 # selecting minimum range from L and R. l = min(l, r) for num in range(1, mx + 1) : # finds upto which elements are to be # deleted when element num is selected. k = max(num - l - 1, 0) # get maximum when selecting element num or not. res[num] = max(res[num - 1], num * count[num] + res[k]) return res[mx] # Driver code if __name__ == "__main__" : a = [2, 1, 2, 3, 2, 2, 1 ] l, r = 1, 1 # size of array n = len(a) # function call to find maximum cost print(maxCost(a, n, l, r)) # This code is contributed by ANKITRAI1
C#
// C# program to find maximum cost // after deleting all the elements // form the array using System; class GFG { // function to return maximum // cost obtained static int maxCost(int []a, int n, int l, int r) { int mx = 0, k; // find maximum element // of the array. for (int i = 0; i < n; ++i) mx = Math.Max(mx, a[i]); // initialize count of all // elements to zero. int[] count = new int[mx + 1]; for(int i = 0; i < count.Length; i++) count[i] = 0; // calculate frequency of all // elements of array. for (int i = 0; i < n; i++) count[a[i]]++; // stores cost of deleted elements. int[] res = new int[mx + 1]; res[0] = 0; // selecting minimum range // from L and R. l = Math.Min(l, r); for (int num = 1; num <= mx; num++) { // finds upto which elements // are to be deleted when // element num is selected. k = Math.Max(num - l - 1, 0); // get maximum when selecting // element num or not. res[num] = Math.Max(res[num - 1], num * count[num] + res[k]); } return res[mx]; } // Driver Code public static void Main() { int []a = { 2, 1, 2, 3, 2, 2, 1 }; int l = 1, r = 1; // size of array int n = a.Length; // function call to find maximum cost Console.WriteLine(maxCost(a, n, l, r)); } } // This code is contributed // by inder_verma
Javascript
<script> // Javascript program to find maximum cost after // deleting all the elements form the array // function to return maximum cost obtained function maxCost(a, n, l, r) { var mx = 0, k; // find maximum element of the array. for (var i = 0; i < n; ++i) mx = Math.max(mx, a[i]); // initialize count of all elements to zero. var count = new Array(mx + 1); count.fill(0); // calculate frequency of all elements of array. for (var i = 0; i < n; i++) count[a[i]]++; // stores cost of deleted elements. var res = new Array(mx + 1); res[0] = 0; // selecting minimum range from L and R. l = Math.min(l, r); for (var num = 1; num <= mx; num++) { // finds upto which elements are to be // deleted when element num is selected. k = Math.max(num - l - 1, 0); // get maximum when selecting element num or not. res[num] = Math.max(res[num - 1], num * count[num] + res[k]); } return res[mx]; } var a = [ 2, 1, 2, 3, 2, 2, 1 ]; var l = 1, r = 1; // size of array var n = a.length; // function call to find maximum cost document.write(maxCost(a, n, l, r)); // This code is contributed by SoumikMondal </script>
8
Complejidad del tiempo: O(max(A))
Publicación traducida automáticamente
Artículo escrito por Sanjit_Prasad y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA