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

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.
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
Recommended Articles
Page :