Program to find minimum cost to increase heights of trees where no adjacent tree has same height in Python


Suppose we have a list of numbers called heights that represents the height of plants and we have another list of values called costs that represents the price needed to increase height of a plant by one. We have to find the smallest cost to make each height in the heights list different from adjacent heights.

So, if the input is like heights = [3, 2, 2] costs = [2, 5, 3], then the output will be 3, as we can increase the last height by 1, which costs 3.

To solve this, we will follow these steps −

  • Define a function dp() . This will take idx, l_height

  • if idx is same as size of heights - 1, then

    • return 0 if heights[idx] is not same as l_height otherwise costs[idx]

  • ret := inf

  • for i in range 0 to 2, do

    • if heights[idx] + i is not same as l_height, then

      • ret := minimum of ret, dp(idx + 1, heights[idx] + i) + costs[idx] * i

  • return ret

  • From the main method return dp(0, null)

Example 

Let us see the following implementation to get better understanding −

 Live Demo

class Solution:
   def solve(self, heights, costs):
      def dp(idx, l_height):
         if idx == len(heights) - 1:
            return 0 if heights[idx] != l_height else costs[idx]
         ret = float("inf")
         for i in range(3):
            if heights[idx] + i != l_height:
               ret = min(ret, dp(idx + 1, heights[idx] + i) + costs[idx] * i)
         return ret
      return dp(0, None)
ob = Solution()
heights = [3, 2, 2]
costs = [2, 5, 3]
print(ob.solve(heights, costs))

Input

[3, 2, 2], [2, 5, 3]

Output

3

Updated on: 23-Dec-2020

142 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements