zoukankan      html  css  js  c++  java
  • House Robber 分类: leetcode 算法 2015-07-09 20:53 2人阅读 评论(0) 收藏

    DP

    对于第i个状态(房子),有两种选择:偷(rob)、不偷(not rob)

    递推公式为:
    f(i)=max{f(i1)+vali,f(i2)+vali,robi1==0robi1==1f(i1),robnot rob

    f(i)为动态规划表(DP表)(状态i下的最优解)
    val为每间房子里的钱(val表)
    rob为记录是否已经偷过,0表示没偷过,1表示偷了(is_robbed表)。

    有了递推公式代码就很好写了

    class Solution:
        # @param {integer[]} nums
        # @return {integer}
        def rob(self, nums):
            val=[0]+nums
            DP=[0]*(len(nums)+1)
            is_robbed=[0]*(len(nums)+1)
            for i in range(1,len(val)):
                if is_robbed[i-1]==0:
                    f_rob=DP[i-1]+val[i]
                else:
                    f_rob=DP[i-2]+val[i]
                f_no_rob=DP[i-1]
                if f_rob>f_no_rob:
                    DP[i]=f_rob
                    is_robbed[i]=1
                else:
                    DP[i]=f_no_rob
                    is_robbed[i]=0
            return DP[len(nums)]

    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    JS 数组及函数的应用
    JavaScript 基础知识点
    利用css布局效果图
    css 区块与盒子模型
    JS数组及函数的应用
    JavaScript基础
    近期总结12.30
    层叠样式与盒子模型
    PHP课后小结 2017.12.22
    PHP课后小结 12.20
  • 原文地址:https://www.cnblogs.com/iois/p/4637150.html
Copyright © 2011-2022 走看看