Open In App

Minimize cost to convert given two integers to zero using given operations

Improve
Improve
Like Article
Like
Save
Share
Report

Given two integers X and Y, and two values cost1 and cost2, the task is to convert the given two numbers equal to zero at minimal cost by performing the following two types of operations: 

  • Increase or decrease any one of them by 1 at cost1.
  • Increase or decrease both of them by 1 at cost2.

Examples: 

Input: X = 1, Y = 3, cost1 = 391, cost2 = 555 
Output: 1337 
Explanation: 
Reduce Y to 1 using the first operation twice and convert both X and Y from 1 to 0 using the second operation. 
Hence, the total cost = 391 * 2 + 555 = 1337.

Input: X = 12, Y = 7, cost1 = 12, cost2 = 7 
Output:
Explanation: 
Reduce X to 7 using first operation and then convert both X and Y to 0 using the second operation. 
Hence, the total cost = 12 * 5 + 7 * 7 = 109 
 

Approach: 
The most optimal way to solve the problem is: 

  • Reduce the maximum of X and Y to the minimum by using first operation. This increases the cost by abs(X – Y) * cost1.
  • Then, reduce both X and Y to 0 using the second operation. This increase the cost by minimum of (X, Y) * cost2.

Below is the implementation of the above approach:

C++




// C++ implementation to find the minimum
// cost to make the two integers equal
// to zero using given operations
#include <bits/stdc++.h>
using namespace std;
 
// Function to find out the minimum cost to
// make two number X and Y equal to zero
int makeZero(int x, int y, int a, int b)
{
     
    // If x is greater than y then swap
    if(x > y)
       x = y,
       y = x;
     
    // Cost of making y equal to x
    int tot_cost = (y - x) * a;
 
    // Cost if we choose 1st operation
    int cost1 = 2 * x * a;
     
    // Cost if we choose 2nd operation
    int cost2 = x * b;
     
    // Total cost
    tot_cost += min(cost1, cost2);
     
    cout << tot_cost;
}
 
// Driver code
int main()
{
    int X = 1, Y = 3;
    int cost1 = 391, cost2 = 555;
 
    makeZero(X, Y, cost1, cost2);
}
 
// This code is contributed by coder001


Java




// Java implementation to find the minimum
// cost to make the two integers equal
// to zero using given operations
import java.util.*;
class GFG{
     
// Function to find out the minimum cost to
// make two number X and Y equal to zero
static void makeZero(int x, int y, int a, int b)
{
     
    // If x is greater than y then swap
    if(x > y)
    {
        int temp = x;
        x = y;
        y = temp;
    }
     
    // Cost of making y equal to x
    int tot_cost = (y - x) * a;
 
    // Cost if we choose 1st operation
    int cost1 = 2 * x * a;
     
    // Cost if we choose 2nd operation
    int cost2 = x * b;
     
    // Total cost
    tot_cost += Math.min(cost1, cost2);
     
    System.out.print(tot_cost);
}
 
// Driver code
public static void main(String args[])
{
    int X = 1, Y = 3;
    int cost1 = 391, cost2 = 555;
 
    makeZero(X, Y, cost1, cost2);
}
}
 
// This code is contributed by Code_Mech


Python3




# Python3 implementation to find the
# minimum cost to make the two integers
# equal to zero using given operations
 
 
# Function to find out the minimum cost to make
# two number X and Y equal to zero
def makeZero(x, y, a, b):
     
    # If x is greater than y then swap
    if(x > y):
        x, y = y, x
     
    # Cost of making y equal to x
    tot_cost = (y - x) * a
 
    # Cost if we choose 1st operation
    cost1 = 2 * x * a
     
    # Cost if we choose 2nd operation
    cost2 = x * b
     
    # Total cost
    tot_cost+= min(cost1, cost2)
     
    print(tot_cost)
     
 
if __name__ =="__main__":
     
    X, Y = 1, 3
 
    cost1, cost2 = 391, 555
 
    makeZero(X, Y, cost1, cost2)
    


C#




// C# implementation to find the minimum
// cost to make the two integers equal
// to zero using given operations
using System;
 
class GFG{
     
// Function to find out the minimum cost to
// make two number X and Y equal to zero
static void makeZero(int x, int y, int a, int b)
{
     
    // If x is greater than y then swap
    if(x > y)
    {
        int temp = x;
        x = y;
        y = temp;
    }
     
    // Cost of making y equal to x
    int tot_cost = (y - x) * a;
 
    // Cost if we choose 1st operation
    int cost1 = 2 * x * a;
     
    // Cost if we choose 2nd operation
    int cost2 = x * b;
     
    // Total cost
    tot_cost += Math.Min(cost1, cost2);
     
    Console.Write(tot_cost);
}
 
// Driver code
public static void Main()
{
    int X = 1, Y = 3;
    int cost1 = 391, cost2 = 555;
 
    makeZero(X, Y, cost1, cost2);
}
}
 
// This code is contributed by Code_Mech


Javascript




<script>
 
// Javascript implementation to find the minimum
// cost to make the two integers equal
// to zero using given operations
 
// Function to find out the minimum cost to
// make two number X and Y equal to zero
function makeZero(x, y, a, b)
{
     
    // If x is greater than y then swap
    if (x > y)
    {
        let temp = x;
        x = y;
        y = temp;
    }
 
    // Cost of making y equal to x
    let tot_cost = (y - x) * a;
 
    // Cost if we choose 1st operation
    let cost1 = 2 * x * a;
 
    // Cost if we choose 2nd operation
    let cost2 = x * b;
 
    // Total cost
    tot_cost += Math.min(cost1, cost2);
 
    document.write(tot_cost);
}
 
// Driver code
let X = 1, Y = 3;
let cost1 = 391, cost2 = 555;
 
makeZero(X, Y, cost1, cost2);
 
// This code is contributed by rameshtravel07  
 
</script>


Output: 

1337

 

Time Complexity: O(1) 
Auxiliary Space: O(1)
 



Last Updated : 09 Apr, 2021
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads