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.

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++

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# 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

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?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
?>

chevron_right


Output:

55


My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.



Improved By : Sam007