Related Articles

# Minimum total cost incurred to reach the last station

• Difficulty Level : Medium
• Last Updated : 22 Apr, 2021

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
To reach index 0 to 1, arr - arr = -1,
Similarly To reach index 2 to 1,
arr - arr = -1, so choc_buy +=1.
Total cost = choc_by * p = 3*10 = 30.

Input : arr[] = {10, 6, 11, 4, 7, 1}    p = 5
Output : 55
To reach index 0 to 1, arr - arr = 4,
so curr_choc =4.
Similarly To reach index 2 to 1,
arr - arr = -5, so curr_choc=4+-5 = -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.
curr_choc = 0

## C++

 `// C++ program to calculate``// minimum cost for candies``#include ``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;``  ``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);`` ` `  ``// Price of each candy``  ``int` `p = 5;`` ` `  ``cout << findMinCost(arr, n, p);`` ` `  ``return` `0;``}`

## Java

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

## Python3

 `# 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#

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

 ``

## Javascript

 ``
Output:
`55` My Personal Notes arrow_drop_up