📜  到达最后一站所需的最低总费用

📅  最后修改于: 2021-06-26 16:38:31             🧑  作者: Mango

给定一个数组,其中每个元素表示每个站点对应的巧克力数量,并从站点i移至站点i + 1,我们免费获得A [i] – A [i + 1]巧克力,如果该数字为负,我们也会失去那么多巧克力。
如果我们的巧克力数量非负数,则只能从i站移到i + 1站。
给定一个巧克力p的成本,找到从第一个工位(工位1)到达最后一个工位的最低成本的任务。
注意:最初我们有0个巧克力。
例子:

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.

方法 :
1.用array的第一个元素初始化curr_buy,并且curr_choc = 0。
2.为每个i将arr [i] -arr [i + 1]添加到curr_choc。
a)检查curr_choc是否为负。
choc_buy + = abs(arr [i]-arr [i + 1])
curr_choc = 0
3.返回choc_buy * p。

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


Javascript


输出:
55

如果您希望与行业专家一起参加现场课程,请参阅《 Geeks现场课程》和《 Geeks现场课程美国》。