《剑指offer》面试题91:粉刷房子(python实现)

"""
题目:
一排n幢房子需要粉刷成红色、绿色和蓝色,不同房子被粉刷成不同颜色的成本不同。用一个n*3的数组表示n幢房子分别用3种颜色粉刷的成本。
要求任意相邻的两幢房子的颜色都不一样,请计算粉刷这n幢房子的最少成本。

例如:
粉刷3幢房子的成本分别为[[17, 2, 16],[15, 14, 5],[13, 3, 1]],那么分别将这3幢房子粉刷成绿、蓝、绿是最低成本,为10.

分析:
使用一个二维矩阵min_cost,去记录每个房子刷成每个颜色的成本,第一个房子就不变了。第二个房子如果刷红色,则它的成本等于min_cost[1][0] = t[1][0]+min(t[0][1],t[0][2]), 同样的道理,
min_cost[1][1] = t[1][1]+min(t[0][0],t[0][2]).如此这般,把min_cost二维矩阵一个一个计算。
当刷到第i个房子时,它的最低成本就是min(min_cost[i])
"""

# 如果每个房子刷三种颜色的成本如下:
costs = [
    [17, 2, 16],
    [15, 10, 5],
    [1300, 300, 1]

# 则依次刷每个房子时,总成本如下:
min_costs = [
    [17,2,16],
    [17,26,7],
    [1307,3007,18]
]
# 可知最低总成本为18




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值