Open In App

Minimum total cost incurred to reach the last station

Given an array where each element denotes the number of chocolates corresponding to each station and to move from station i to station i+1, we get A[i] – A[i+1] chocolates for free, if this number is negative, we lose that many chocolates also. 
You can only move from station i to station i+1, if we have non-negative number of chocolates. 
Given the cost of one chocolate p, the task to find the minimum cost incurred in reaching last station from the first station (station 1). 
Note: Initially we have 0 chocolates.
Examples: 
 

Input : arr[] = {1, 2, 3}   p = 10
Output : 30
Initial choc_buy = 1 (arr[0])
To reach index 0 to 1, arr[0] - arr[1] = -1,
so choc_buy +=1.
Similarly To reach index 2 to 1, 
arr[1] - arr[2] = -1, so choc_buy +=1.
Total choc_buy = 3.
Total cost = choc_by * p = 3*10 = 30.

Input : arr[] = {10, 6, 11, 4, 7, 1}    p = 5
Output : 55
Initial choc_buy = 10 (arr[0])
To reach index 0 to 1, arr[0] - arr[1] = 4, 
so curr_choc =4.
Similarly To reach index 2 to 1, 
arr[1] - arr[2] = -5, so curr_choc=4+-5 = -1.
choc_buy += abs(-1).
So, similarly till last station, Total choc_buy = 11.
Total cost = choc_by * p = 11*5 = 55.

 



Recommended Practice

Approach : 
1. Initialize choc_buy with the first element of array and curr_choc =0. 
2. Add arr[i]-arr[i+1] to curr_choc for every i. 
a) Check if curr_choc becomes negative. 
choc_buy += abs(arr[i]- arr[i+1]) 
curr_choc = 0 
3. Return choc_buy * p.




// C++ program to calculate
// minimum cost for candies
#include <bits/stdc++.h>
using namespace std;
 
// Function to find minimum cost
// to be incurred
int findMinCost(int arr[], int n, int choc_cost) {
 
  // To reach first station, initial
  // chocolates required
  int choc_buy = arr[0];
  int curr_choc = 0;
 
  // Start traversing
  for (int i = 0; i < n - 1; i++) {
 
    // Find no. of chocolates
    // lose or gain
    int choc = arr[i] - arr[i + 1];
 
    // Add into curr_coc
    curr_choc += choc;
 
    // if no. of chocolates becomes
    // negative that means we have
    // to buy that no. of chocolates
    if (curr_choc < 0) {
      choc_buy += abs(curr_choc);
      curr_choc = 0;
    }
  }
 
  // Return cost required
  return choc_buy * choc_cost;
}
 
// Drivers code
int main() {
  int arr[] = {10, 6, 11, 4, 7, 1};
  int n = sizeof(arr) / sizeof(arr[0]);
 
  // Price of each candy
  int p = 5;
 
  cout << findMinCost(arr, n, p);
 
  return 0;
}




// Java program to calculate
// minimum cost for candies
import java.io.*;
 
class GFG
{
    // Function to find minimum cost
    // to be incurred
    static int findMinCost(int arr[], int n, int choc_cost)
    {
     
    // To reach first station, initial
    // chocolates required
    int choc_buy = arr[0];
    int curr_choc = 0;
     
    // Start traversing
    for (int i = 0; i < n - 1; i++)
    {
     
        // Find no. of chocolates
        // lose or gain
        int choc = arr[i] - arr[i + 1];
     
        // Add into curr_coc
        curr_choc += choc;
     
        // if no. of chocolates becomes
        // negative that means we have
        // to buy that no. of chocolates
        if (curr_choc < 0)
        {
            choc_buy += Math.abs(curr_choc);
            curr_choc = 0;
        }
    }
     
    // Return cost required
    return choc_buy * choc_cost;
    }
     
    // Drivers code
    public static void main (String[] args)
    {
        int arr[] = {10, 6, 11, 4, 7, 1};
        int n = arr.length;
         
        // Price of each candy
        int p = 5;
         
        System.out.println ( findMinCost(arr, n, p));  
    }
}
 
// This code is contributed by vt_m




# Python 3 program to calculate
# minimum cost for candies
 
# Function to find minimum cost
# to be incurred
def findMinCost(arr, n, choc_cost):
 
    # To reach first station,
    # initial chocolates required
    choc_buy = arr[0]
    curr_choc = 0
 
    # Start traversing
    for i in range(0,n - 1):
     
        # Find no. of chocolates lose
        # or gain
        choc = arr[i] - arr[i + 1]
     
        # Add into curr_coc
        curr_choc += choc
     
        # if no. of chocolates becomes
        # negative that means we have
        # to buy that no. of chocolates
        if (curr_choc < 0):
            choc_buy += abs(curr_choc)
            curr_choc = 0
     
    # Return cost required
    return choc_buy * choc_cost
 
 
# Drivers code
arr = [10, 6, 11, 4, 7, 1]
n = len(arr)
 
# Price of each candy
p = 5
 
print(findMinCost(arr, n, p))
 
# This code is contributed by Smitha Dinesh Semwal




// C# program to calculate
// minimum cost for candies
using System;
 
class GFG
{
    // Function to find minimum cost
    // to be incurred
    static int findMinCost(int []arr,
                    int n, int choc_cost)
    {
         
        // To reach first station, initial
        // chocolates required
        int choc_buy = arr[0];
        int curr_choc = 0;
         
        // Start traversing
        for (int i = 0; i < n - 1; i++)
        {
         
            // Find no. of chocolates
            // lose or gain
            int choc = arr[i] - arr[i + 1];
         
            // Add into curr_coc
            curr_choc += choc;
         
            // if no. of chocolates becomes
            // negative that means we have
            // to buy that no. of chocolates
            if (curr_choc < 0)
            {
                choc_buy += Math.Abs(curr_choc);
                curr_choc = 0;
            }
    }
     
    // Return cost required
    return choc_buy * choc_cost;
    }
     
    // Drivers code
    public static void Main ()
    {
        int []arr = {10, 6, 11, 4, 7, 1};
        int n = arr.Length;
         
        // Price of each candy
        int p = 5;
         
    Console.WriteLine( findMinCost(arr, n, p));
    }
}
 
// This code is contributed by vt_m




<?php
// PHP program to calculate
// minimum cost for candies
 
// Function to find minimum cost
// to be incurred
function findMinCost($arr, $n, $choc_cost)
{
 
    // To reach first station, initial
    // chocolates required
    $choc_buy = $arr[0];
    $curr_choc = 0;
     
    // Start traversing
    for ($i = 0; $i < $n - 1; $i++) {
     
        // Find no. of chocolates
        // lose or gain
        $choc = $arr[$i] - $arr[$i + 1];
     
        // Add into curr_coc
        $curr_choc += $choc;
     
        // if no. of chocolates becomes
        // negative that means we have
        // to buy that no. of chocolates
        if ($curr_choc < 0) {
        $choc_buy += abs($curr_choc);
        $curr_choc = 0;
        }
    }
     
    // Return cost required
    return $choc_buy * $choc_cost;
}
 
// Driver Code
$arr = array(10, 6, 11, 4, 7, 1);
$n = count($arr);
 
// Price of each candy
$p = 5;
 
echo findMinCost($arr, $n, $p);
 
// This code is contributed by Sam007
?>




<script>
// Javascript program to calculate
// minimum cost for candies
 
 
// Function to find minimum cost
// to be incurred
function findMinCost(arr,  n,  choc_cost) {
 
// To reach first station, initial
// chocolates required
var choc_buy = arr[0];
var curr_choc = 0;
 
// Start traversing
for (var i = 0; i < n - 1; i++) {
 
    // Find no. of chocolates
    // lose or gain
    var choc = arr[i] - arr[i + 1];
 
    // Add into curr_coc
    curr_choc += choc;
 
    // if no. of chocolates becomes
    // negative that means we have
    // to buy that no. of chocolates
    if (curr_choc < 0) {
    choc_buy += Math.abs(curr_choc);
    curr_choc = 0;
    }
}
 
// Return cost required
return (choc_buy * choc_cost);
}
 
var  arr = [10, 6, 11, 4, 7, 1];
var n = 6;
 
// Price of each candy
var p = 5;
 
document.write(findMinCost(arr, n, p));
 
 
 
</script>

Output: 

55

 

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


Article Tags :