在Python中查找每个树的最小高度增加成本,其中相邻的树高度不同
假设我们有一个名为heights的数字列表,表示植物的高度,还有一个名为costs的值列表,表示将植物的高度增加一的价格。我们必须找到使heights列表中每个高度与相邻高度不同的最小成本。
因此,如果输入的是heights = [3, 2, 2] costs = [2, 5, 3],则输出将是3,因为我们可以将最后一个高度增加1,这需要花费3。
为了解决这个问题,我们将遵循以下步骤 −
- 定义一个名为dp()的函数。这将取idx,l_height
-
如果idx与heights的大小-1相同,则
- 如果heights[idx]与l_height不同,则返回0,否则返回costs[idx]
- ret := inf
-
for i in range 0 to 2, do
- 如果heights[idx] + i与l_height不同,则
- ret := ret、dp(idx + 1,heights[idx] + i) + costs[idx] * i的最小值
- 如果heights[idx] + i与l_height不同,则
- 返回ret
-
从main方法返回dp(0,null)
示例
让我们看看以下实现,以获得更好的理解 −
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))
输入
[3,2,2],[2,5,3]
输出
3