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)]

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

  • 相关阅读:
    chkconfig命令
    PHP中的WebService
    MySQL 中联合查询效率分析
    javascript中json对象长度
    Replace Pioneer
    c++ 调用matlab程序
    ubuntu 安装 sublime
    一些地址收藏
    学习笔记草稿
    Redis Cluster 集群使用(3)
  • 原文地址:https://www.cnblogs.com/iois/p/4637150.html
Copyright © 2011-2022 走看看